Entity Framework Core嵌套Sum求和排序报错,如何按EF Core方式改写?
解决EF Core嵌套聚合排序的报错问题
你遇到的错误是因为EF Core无法将嵌套的Sum聚合直接转换为SQL——SQL本身不支持聚合函数嵌套调用(比如SUM(SUM(...))的写法)。可以通过先计算总合计值再排序的方式改写查询:
方法1:投影后排序
先将每个实体的总合计值投影出来,再基于该值排序,最后还原实体对象:
var result = entity .Select(e => new { Entity = e, Total = e.FieldOne.Sum(fo => fo.NestedField.Sum(nf => nf.SecondNestedField)) }) .OrderBy(x => x.Total) .Select(x => x.Entity) .ToList();
方法2:使用let关键字
通过LINQ查询语法的let关键字定义临时变量存储总合计值,再排序:
var result = from e in entity let total = e.FieldOne.Sum(fo => fo.NestedField.Sum(nf => nf.SecondNestedField)) orderby total select e;
这两种写法都会让EF Core生成合法的SQL,将嵌套聚合拆解为子查询或关联计算,避免了聚合函数嵌套的问题。
内容的提问来源于stack exchange,提问作者motivationofyours
相关产品推荐
相关产品推荐

