Как получить отличительные значения из списка (Of T) с помощью Linq

У меня есть List (Of Hardware) - Список называется HWModels

Оборудование класса имеет следующие свойства:

  • ModelName
  • Статус
  • CPUStatus
  • MemoryStatus
  • DiskStatus

Список заполняется чтением CSV файла, после его заполнения я хочу вернуть отдельные записи на основе ModelName

Я попытался сделать это следующим образом:

(From a In HWModels Select a.ModelName).Distinct

Но это не правильно, потому что я получаю список только ModelName и ничего больше.

Как мне получить функцию Distinct для возврата всех других членов класса в список?

2 ответа

LINQ to Objects не обеспечивает ничего, что можно "отличить от проекции" аккуратно. Вы можете сгруппировать по имени, а затем взять первый элемент в каждой группе, но это довольно уродливо.

My MoreLINQ предоставляет DistinctBy метод - на С#, который вы использовали бы:

var distinct = HWModels.DistinctBy(x => x.ModelName).ToList();

Предположительно, VB будет чем-то вроде

Dim distinct = HWModels.DistinctBy(Function(x) x.ModelName).ToList

Извините за любые ошибки синтаксиса: (


Это сгруппирует ваши объекты с помощью предпочтительного свойства и затем выберет первый из них, удалив дубликаты.

Dim newlist = HWModels.GroupBy(Function(x) x.ModelName).Select(Function(x) x.First).ToList

licensed under cc by-sa 3.0 with attribution.