我有一个收藏'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”列的值,但是再次......性能受到重创。最终会返回正确的结果。
是否有更简单,更好或更快的方法来获得相同的结果?
感谢任何帮助!