Чтобы найти дубликаты (основанные на двух полях - Name and Type
) в коллекции и извлечь поле thid (ID
), необходимо начать с разбивки проблем на части.
1) Найти дубликаты
- Ключевые поля GroupBy, (Имя и Тип)
list.GroupBy(x=>new{x.Name,x.Type})
- Группы фильтров, в которых более 1 элемента
list.GroupBy(x=>new{x.Name,x.Type}).Where(x=>x.Count()>1)
2) Выберите идентификаторы
list.GroupBy(x=>new{x.Name,x.Type})
.Where(x=>x.Count()>1)
.SelectMany(x=>x.ToList())
Собираем все вместе, например,
var list = new List<CustomObject>
{
new CustomObject{ID=1, Name="Abc",Type="Type1"},
new CustomObject{ID=2, Name="Def",Type="Type2"},
new CustomObject{ID=3, Name="Abc",Type="Type1"},
new CustomObject{ID=4, Name="Abc",Type="Type2"},
new CustomObject{ID=5, Name="Def",Type="Type2"},
new CustomObject{ID=6, Name="Def",Type="Type1"},
};
var result = list.GroupBy(x=>new{x.Name,x.Type})
.Where(x=>x.Count()>1)
.SelectMany(x=>x.ToList()).Select(x=>x.ID);
Вывод для приведенного выше примера
1
3
2
5