sql - 使用 Lambda 表达式以及 Join、GroupBy、Count 和 Sum 的 Linq to SQL

标签 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,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 byconstant 运算符,您可以在 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/

相关文章:

mysql - [MySQL] : select UNIQUE w/join

mysql - 多对多mySQL选择

SQL Server 错误或功能?十进制数转换

sql-server - 如何确定 LINQ to SQL 结果集的大小(以字节为单位)

c# - Linq to EF .Clear() 不清除

mysql - 使用 WHERE 从两个相同的表中选择数据

php - 如何在保持查询清晰有效的同时实现动态属性

sql - Oracle、Postgres 和 SQL Server 中的字符串连接运算符

php - MySQL PHP 查询无效 - 找不到列

c# - LINQ 加入 2 个数据表并使用 SUM AND GROUP BY