我有一个人员列表,每个人都有一个Color.Name
我需要基本上得到一个简单的对象,如:
"Blue", 50
"Green", 70
等
List<Person> people....;
people.GroupBy(p=>p.Color.name) ?????
答案 0 :(得分:5)
使用Select
List<Person> people....;
people.GroupBy(p=>p.Color.name)
.Select(g => new { Color = g.Key, Count = g.Count() });
您可以将new { Color = g.Key, Count = g.Count() }
替换为您想要的任何内容,以获得所需的输出,例如"\"" + g.Key + "\", " + g.Count()
,以获得您问题中的字符串列表。
答案 1 :(得分:1)
拥有GroupBy会生成具有Key
属性的对象和每个Group中的对象的Enumerable。 Key可以是简单类型,如string
,也可以是复杂对象(如Person)。
因此,对于每个组,它将获得名称(x.Key)和该组中对象的计数(颜色名称)。
people.GroupBy(p=>p.Color.name).Select(x=>new {Color = x.Key, Count= x.Count()});