如何正确使用带聚合函数的GroupJoin实现文章分类对应文章数统计
问题原因
你现有的GroupJoin逻辑本身没有语法错误,返回空结果最常见的原因是LINQ to Entities默认是延迟执行的,你只定义了查询表达式,没有调用执行方法触发实际的数据库查询。另外也可以直接使用EF内置的导航属性实现需求,写法更简洁。
实现方案
方案1:使用导航属性(推荐)
你的PostCategory模型已经定义了postContents导航属性,直接通过投影查询即可,EF会自动生成关联统计的SQL:
var categoryPostCount = context.postCategories .Select(c => new { Cate = c.categoryName, Cont = c.postContents.Count() }) .ToList();
该方案天然支持统计无文章的分类,无文章时统计值为0。
方案2:修正后的GroupJoin写法
如果你需要显式使用GroupJoin实现,只需要在查询末尾追加.ToList()触发执行即可:
var NumberOfCategoriesForEachPost = context.postCategories .GroupJoin(context.postContents, cat => cat.Id, con => con.postCatId, (Category, Content) => new { Cate = Category.categoryName, Cont = Content.Count() }) .ToList();
异常排查
如果执行后依然无数据,请先单独执行以下查询确认数据源正常:
- 确认分类表有数据:
context.postCategories.ToList() - 确认文章表有对应关联数据:
context.postContents.Where(p => p.postCatId != null).ToList()
内容的提问来源于stack exchange,提问作者MOHAMED ABUELATTA
相关产品推荐
相关产品推荐

