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的主要内容,如果未能解决你的问题,请参考以下文章
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 运用实例