Sagen wir, ich lasse mir das amputieren Person
Klasse:
class Person
{
public int Age { get; set; }
public string Country { get; set; }
public int SOReputation { get; set; }
public TimeSpan TimeSpentOnSO { get; set; }
...
}
Ich kann dann gruppieren nach Age
y Country
wie diese:
var groups = aListOfPeople.GroupBy(x => new { x.Country, x.Age });
Dann kann ich alle Gruppen mit ihren Rufsummen wie folgt ausgeben:
foreach(var g in groups)
Console.WriteLine("{0}, {1}:{2}",
g.Key.Country,
g.Key.Age,
g.Sum(x => x.SOReputation));
Meine Frage ist, wie kann ich eine Summe der TimeSpentOnSO
Eigentum? Die Sum
Methode wird in diesem Fall nicht funktionieren, da sie nur für int
und so weiter. Ich dachte, ich könnte die Aggregate
Methode, aber ich kann einfach nicht herausfinden, wie man sie benutzt... Ich versuche alle Arten von Eigenschaften und Typen in verschiedenen Kombinationen, aber der Compiler wird einfach nicht erkennen, es.
foreach(var g in groups)
Console.WriteLine("{0}, {1}:{2}",
g.Key.Country,
g.Key.Age,
g.Aggregate( what goes here?? ));
Habe ich die Aggregate-Methode völlig missverstanden? Oder was ist hier los? Sollte ich stattdessen eine andere Methode verwenden? Oder muss ich meine eigene Methode schreiben? Sum
Variante für TimeSpan
s?
Und um das Durcheinander noch zu vergrößern, was ist, wenn Person eine anonyme Klasse ist, ein Ergebnis von zum Beispiel einer Select
oder eine GroupJoin
Aussage?
Ich habe gerade herausgefunden, dass ich die Aggregate
Methode funktionieren, wenn ich eine Select
über die TimeSpan
Eigentum zuerst... aber ich finde das irgendwie nervig... Ich habe immer noch nicht das Gefühl, dass ich diese Methode überhaupt verstehe...
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));