1

コレクション「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" 列の値を取得するために、さまざまな方法を試しましたが、パフォーマンスが大幅に低下します。ただし、最終的には正しい結果が返されます。

同じ結果を達成するためのより簡単で、より良い、またはより速い方法はありますか?

どんな助けでも大歓迎です!

4

0 に答える 0