我有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>
获得重复项?
答案 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())