使用Lambda表达式以及Join、GroupBy、Count和Sum将Linq转换为SQL
我使用此SQL语句获得我想要的:使用Lambda表达式以及Join、GroupBy、Count和Sum将Linq转换为SQL,sql,linq,join,lambda,count,Sql,Linq,Join,Lambda,Count,我使用此SQL语句获得我想要的: select count(o.Id) as order_amount, sum(r.Price) as Total_ordersum from Orders o join OrderRows r on o.Id = r.OrderId; 我尝试使用Linq lambda表达式来获得相同的结果: Orders .Join(OrderRows, o => o.Id, r => r.OrderId, (o,r) => new {o,
select count(o.Id) as order_amount, sum(r.Price) as Total_ordersum from Orders o join OrderRows r on o.Id = r.OrderId;
我尝试使用Linq lambda表达式来获得相同的结果:
Orders
.Join(OrderRows, o => o.Id, r => r.OrderId, (o,r) => new {o,r})
.GroupBy(g => new {g.o.Id, g.r.Price})
.Select(group => new {
order_amount = group.Count(),
Total_ordersum = group.Key.Price,
});´
但我得到了三行,而不是一行的订单总额和所有订单的总和。我做错了什么
我做错了什么
LINQ和SQL查询是不等价的。您的SQL查询没有分组依据
,而LINQ查询没有按订单Id
分组和记录价格
,这当然会产生不同的结果。此外,SQL查询对记录Price
求和,而LINQ查询不求和
通过使用一种异常的groupby
常量运算符,可以在LINQ中获得相同的结果:
var query = Orders
.Join(OrderRows, o => o.Id, r => r.OrderId, (o, r) => new { o, r })
.GroupBy(g => 0) // any constant would work
.Select(g => new
{
order_amount = g.Count(),
Total_ordersum = g.Sum(e => e.r.Price),
});
谢谢你,伊万!但它所说的GroupBy(g=>0)是什么意思呢?您不应该在lambda表达式中使用声明的变量吗?@HabilKantur实际上不是。有些人使用
\uu
来表示未使用的lambda参数,如GroupBy(\u=>0)
。