在单个列表中获取重复的字段名称

时间:2013-04-01 18:27:36

标签: c# asp.net linq list

我有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

我想根据名字重复项目的名称 例如:我想要“Zen,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>获得重复项?

1 个答案:

答案 0 :(得分:4)

添加Where子句以仅获取包含多于1个元素的组,并SelectMany将结果展平为一个列表:

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

我发现您不会在同一组中 Zen zen ,因此您应该将GroupBy更改为:GroupBy(s => s.CarName.ToLower())