如何正确使用LINQ GroupBy扩展方法结合聚合函数实现分组统计
原代码问题说明
- 提前调用
AsEnumerable()会将全表数据加载到内存后再执行分组,性能极低,且不符合查询设计逻辑 GroupBy分组键配置错误:将单条数据的MemberId长度也作为分组维度,和你按postSubjectId分组统计的需求完全不符- 多余的前置
Select操作,无需提前投影字段,直接在分组后做聚合即可
正确实现代码
和你给出的原生SQL逻辑完全对齐的LINQ写法如下:
var mmbrs = _context.Rooms .GroupBy(r => r.postSubjectId) .Select(g => new { postId = g.Key, mmbrsCount = g.Count(r => r.MemberId != null) }) .ToList();
上述代码会被EF Core直接翻译成等效的SQL语句在数据库侧执行,执行效率和你手写原生SQL一致。如果你需要统计每组内不重复的MemberId数量,只需要把统计逻辑改成g.Select(r => r.MemberId).Distinct().Count()即可。
内容的提问来源于stack exchange,提问作者MOHAMED ABUELATTA
相关产品推荐
相关产品推荐

