假设我有这个截肢Person类:
class Person
{
public int Age { get; set; }
public string Country { get; set; }
public int SOReputation { get; set; }
public TimeSpan TimeSpentOnSO { get; set; }
...
}
Age然后我可以Country像这样分组:
var groups = aListOfPeople.GroupBy(x => new { x.Country, x.Age });
然后我可以输出所有组的声誉总数,如下所示:
foreach(var g in groups)
Console.WriteLine("{0}, {1}:{2}",
g.Key.Country,
g.Key.Age,
g.Sum(x => x.SOReputation));
我的问题是,我怎样才能得到TimeSpentOnSO财产的总和?该Sum方法在这种情况下不起作用,因为它仅用于int等。我以为我可以使用该Aggregate方法,但严重不知道如何使用它...我正在尝试各种组合的各种属性和类型,但编译器无法识别它。
foreach(var g in groups)
Console.WriteLine("{0}, {1}:{2}",
g.Key.Country,
g.Key.Age,
g.Aggregate( what goes here?? ));
我是否完全误解了 Aggregate 方法?或者发生了什么?我应该改用其他方法吗?还是我必须Sum为 s 编写自己的变体TimeSpan?
更糟糕的是,如果 Person 是一个匿名类,例如 aSelect或GroupJoin语句的结果,该怎么办?
Aggregate刚刚发现如果我先Select对属性进行操作,我可以使该方法起作用TimeSpan……但我觉得那种烦人……仍然觉得我根本不理解这种方法……
foreach(var g in groups)
Console.WriteLine("{0}, {1}:{2}",
g.Key.Country,
g.Key.Age,
g.Select(x => x.TimeSpentOnSO)
g.Aggregate((sum, x) => sum + y));