Давайте скажем, что у меня есть этот ампутированный класс 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));