Давайте скажем, что у меня есть этот ампутированный класс 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
для TimeSpan
s?
И чтобы добавить к беспорядку, что, если Person является анонимным классом, результатом является, например, оператор Select
или 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));