Linq一组总数

时间:2014-07-26 17:29:50

标签: c# linq group-by

我有一个人员列表,每个人都有一个Color.Name

我需要基本上得到一个简单的对象,如:

 "Blue", 50
 "Green", 70

List<Person> people....;

people.GroupBy(p=>p.Color.name)    ?????

2 个答案:

答案 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()});