コレクション「Col」があります:
ID|Type|Type1|Type2|Count
1| a | a | b |2
1| b | a | b |1
2| d | b | d |2
2| b | b | d |2
3| x | y | x |0
3| y | y | x |1
一意の ID ごとに、可能なタイプ、各タイプのカウントの合計、および各タイプの個別のカウントを含むコレクションを返したい
理想的には、出力は次のようになります。
ID|Type1|Type2|TotalCount|Type1Count|Type2Count
1 | a | b | 3 | 2 | 1
2 | b | d | 4 | 2 | 2
3 | y | x | 1 | 0 | 1
現在、コレクションで groupBy と Select を実行しています。
Col.GroupBy(g=>new{g.ID, g.Type1, g.Type2}).Select(s=>new
{s.Key.ID, s.Key.Type1, s.Key.Type2, TotalCount = s.Sum(x=>x.Count),
Type1Count = s.Count(x=>x.Type == s.Key.Type1) //addition of individual count severely slows down query
Type2Count = s.Count(x=>x.Type == s.Key.Type2)// same here
}
);
上記のように、Type1Count と Type2Count を含めると、これらの列がないとクエリにかかる時間が大幅に増加します。グループ化された各行の最初の Col テーブルから "Count" 列の値を取得するために、さまざまな方法を試しましたが、パフォーマンスが大幅に低下します。ただし、最終的には正しい結果が返されます。
同じ結果を達成するためのより簡単で、より良い、またはより速い方法はありますか?
どんな助けでも大歓迎です!