2016-01-14 2 views
2

В настоящее время у меня есть список, содержащий элементы с полями: «имя, описание, источник, название, ...». Я хочу сбросить список из этого, но исключительно уникальным на основе двух ключей, названия и описания. В принципе, мне не нужны элементы из списка с тем же именем и тем же описанием, но если у них разные имена и одно и то же описание, то это нормально.Выбор из списка на основе нескольких уникальных полей

Я посмотрел, что с помощью

list.select(x => x.Name).Distinct() 

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

Я также взглянул на хэш-наборы, но я полностью смущен тем, как это работает.

Если кто-то может помочь, был бы признателен.

+0

http://stackoverflow.com/questions/1300088/distinct-with-lambda – Steve

ответ

0

Вы можете использовать следующий пример, взятый из HERE:

IEnumerable<Person> filteredList = originalList 
    .GroupBy(person => person.Name) 
    .Select(group => group.First()); 

Или используйте DistinctBy из MoreLINQ NuGet доступных HERE

+0

Почему копировать/вставки из другого ответа ? Просто близко, повторяйте или отправьте комментарий. – Steve

+1

Этот ответ адаптирован к вопросу OPs, ссылка на другой ответ явно включена здесь, также представлено альтернативное решение, поэтому я не считаю, что публикация комментария будет уместна. –

+0

Извините, но я стою на свое мнение. Если вы считаете, что ссылка решает проблему со всеми присутствующими там ответами, то это дубликат. Если вы не думаете, то комментариев достаточно. Простое изменение имени переменной не делает это существенным другим ответом. , – Steve

0
var uniqueData = list.Select(x => new 
      { 
       UniqueKey = x.Name + " " + x.Description, 
       Data = x, 
      }).GroupBy(x => x.UniqueKey) 
       .Select(g => g.First().Data) 
       .ToList(); 

Вы должны, вероятно, использовать некоторую уникальную/специальный символ/строку вместо из «", чтобы убедиться, что UniqueKey действительно уникален.

2

Если вы просто ищете для всех комбинаций отчетливого имени/описания:

list.Select(x => new {x.Name, x.Description}).Distinct(); 
+0

Однако мы не знаем, хочет ли OP и другая информация, содержащаяся в ее товарах. – Steve

Смежные вопросы