【发布时间】:2014-04-17 21:09:38
【问题描述】:
我对 LINQ to 对象中的 groupby 行为感到困惑。让我们假设我有以下课程;
public class person
{
public string name { get; set; }
public int age { get; set; }
}
假设我有一个列表或类型的人; List<person> people
现在,我想生成一个具有 IGrouping 或匿名类型的 IEnumerable<T>,它具有两个属性:1) 名称(键)和 2) 具有该名称的人的所有年龄的总和。
这是我尝试过的几个例子(不成功);
people.GroupBy(x => x.name, x => x, (key, value) => value.Aggregate((c, n) => c + n));
编译时会出现错误cannot convert type "int" to "namespace.person"
在此之前,我正在尝试更多类似的东西;
people.GroupBy(x => x.name).Select(g => new { g.Key, g.Aggregate((c, n) => c + n)) } );
这基本上给出了相同的错误。我基本上很难理解GroupBy 返回的值到底是什么。起初,我认为基本重载给了我一个键值对,其中 x.Key 是我用我的委托指定的键,x.Value 将是 IEnumerable<T> 其中 typeof T 将是 x 的类型.当然,如果是这样的话,我的第二个例子会很有效。我的问题有点开放式,但有人可以首先解释两件事;如何使用 LINQ 实现我的最终目标?其次,为什么GroupBy 的结果不像我在这里描述的那样?它是什么?我觉得像一个键值对,其中的值是与该键匹配的对象的集合,比实际返回的要直观得多。
【问题讨论】: