EF LINQ Group By 和 Sum

Posted

技术标签:

【中文标题】EF LINQ Group By 和 Sum【英文标题】:EF LINQ Group By and Sum 【发布时间】:2021-05-09 17:11:32 【问题描述】:

我正在尝试在使用 LINQ 选择其他列的同时使用 group by 和 sum 进行选择,我想出了这个

var inputList = from c in db.InputItem
                             join o in db.ItemsDefinition on c.ItemsDefinitionID equals o.ItemsDefinitionID
                             group c by new  c.ItemsDefinitionID, o.ItemsAName  into g
                             select new
                             
                                 Name = g.Key,
                                 Sum = g.Sum(c => c.Quantity)
                             ;

我要做的是执行这个 SQL 语句

Select i.ItemsDefinitionID,
       ID.ItemsAName, 
       sum(Quantity) as avialable
from InputItem i 
Left Outer Join ItemsDefinition ID On i.ItemsDefinitionID=ID.ItemsDefinitionID
group by i.ItemsDefinitionID,ID.ItemsAName

热烈感谢

【问题讨论】:

问题是什么? 也许我的SQL to LINQ Recipe 可以帮助你。 【参考方案1】:

你也可以这样做:

var inputList = d.InputItem
    .GroupBy(s =>s.ItemsDefinitionID, s.ItemsDefinition.AName)
    .Select(g => new
    
        ItemsDefinitionID=g.Key.ItemsDefinitionID,
        Name = g.Key.AName,
        Available= g.Sum(s =>s.Quantity),
       
    )
    .ToList();

【讨论】:

【参考方案2】:

如果您的关系在模型中正确定义,您实际上不需要在 EF 中进行手动联接。

这个查询就足够了

var result = db.ItemsDefinition.Select(id => new  id.ItemsDefinitionID, 
        id.ItemsAName, Quantity = id.Items.Sum(i => i.Quantity) );

要么将 SQL 生成留给 EF,要么停止使用 EF。如果您一直担心它会生成的查询,那么使用 ORM 是没有意义的。

【讨论】:

以上是关于EF LINQ Group By 和 Sum的主要内容,如果未能解决你的问题,请参考以下文章

linq和ef关于group by取最大值的两种写法

EF Linq to Sql 多表left join查询并对结果group by分组之后进行count,max等处理

linq group by 和 select inside group by 给出错误 EFcore

C# Linq group by 和 group by into 运用实例

Linq order by,group by 和 order by 每组?

LINQ Group By 和选择集合