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 表中获取“计数”列的值,但是再次......性能受到很大影响。但最终会返回正确的结果。

是否有更简单、更好或更快的方法来实现相同的结果?

任何帮助表示赞赏!

4

0 回答 0