假设我有这个截肢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));