2013-04-01 2 views
1

У меня есть List<Car> lstcar со свойствамиПолучить дубликат поля Имя в одном списке

name-Zen id-1211 MfYear-1990 Color-black 
name-Alto id-1521 MfYear-1990 Color-black 
name-Nano id-9911 MfYear-1990 Color-black 
name-800 id-1721 MfYear-1990 Color-black 
name-zen id-711 MfYear-1990 Color-black 
name-Swift id-9911 MfYear-1990 Color-black 
name-Nano id-1081 MfYear-1990 Color-black 

Я хочу, чтобы имя повторяющихся элементов на основе имени например: Я хочу, чтобы «Дзэн, Nano», но когда я

List<Car> dup = lstcar.GroupBy(s => s.CarName) 
     .Select(grp => grp.FirstOrDefault()) 
     .OrderBy(s => s.CarName) 
     .ToList<Car>(); 

я dup имеет это значение

name-Zen id-1211 MfYear-1990 Color-black 
name-Alto id-1521 MfYear-1990 Color-black 
name-Nano id-9911 MfYear-1990 Color-black 
name-800 id-1721 MfYear-1990 Color-black  
name-Swift id-9911 MfYear-1990 Color-black 

, но я хочу

name-Zen id-1211 MfYear-1990 Color-black  
name-Nano id-9911 MfYear-1990 Color-black  
name-zen id-711 MfYear-1990 Color-black 
name-Nano id-1081 MfYear-1990 Color-black 

Как получить дубликаты от одного List<T>?

ответ

4

Добавить Where положение, чтобы получить только группы с более чем 1 элемент и SelectMany выравниваться результаты в один список:

var duplications = lstcar.GroupBy(s => s.CarName) 
         .Where(g => g.Count() > 1) 
         .SelectMany(g => g) 
         .ToList(); 

Я вижу, вы не будете Zen и дзен в той же группе, поэтому вы должны изменить свой GroupBy на: GroupBy(s => s.CarName.ToLower())

+0

Спасибо большое! Сделал работу :) – user1799214

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