この切断された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 メソッドを完全に誤解していますか? または何が起こっているのですか?代わりに使用する必要がある他の方法はありますか?または、s の独自のSum
バリアントを作成する必要があり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));