私はこの切断されたPerson
クラスを持っていると言うことができます:C#:Enumerable.Aggregateメソッドの使用方法
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メソッドを完全に誤解しましたか?または何が起こっている?代わりに使うべき他の方法ですか?あるいは、TimeSpan
のために私自身のSum
の変種を書かなければなりませんか?
さらに、Personが匿名クラスの場合、例えばSelect
やGroupJoin
の文の結果はどうでしょうか?
TimeSpan
プロパティでSelect
プロパティを最初に実行した場合、Aggregate
メソッドを動作させることができたことがわかりました...しかし、私はそのような迷惑なものを見つけました...まだこのメソッドを理解しているとは思わないまったく...
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));
あなたが必要とするもの(時間、分、秒、日など)に応じた単位の単位集計(削減)は、今私が遭遇した世界で最もクールなものの1つです私がそれを使いたいと思った状況。 :) –