我使用这个 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,r})
.GroupBy(g => new {g.o.Id, g.r.Price})
.Select(group => new {
order_amount = group.Count(),
Total_ordersum = group.Key.Price,
});´
但是我得到了三行,而不是一行,其中包含订单总金额和所有订单的总和。我在这里做错了什么?
最佳答案
What am I doing wrong here?
LINQ 和 SQL 查询并不等效。您的 SQL 查询没有 GROUP BY
,而 LINQ 查询则按订单 Id
进行分组并记录 Price
,这当然会生成不同的结果。此外,SQL 查询确实对记录 Price
求和,而 LINQ 查询则不会。
通过使用一种不寻常的 group by
constant 运算符,您可以在 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),
});
关于sql - 使用 Lambda 表达式以及 Join、GroupBy、Count 和 Sum 的 Linq to SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37588537/