【问题标题】:Linq group by and sum with multiple tablesLinq 对多个表进行分组和求和
【发布时间】:2023-04-02 12:15:02
【问题描述】:

我有两个表 Orders 和 OrderDetails,我正在尝试按在订单表中找到的用户名分组,然后是在订单详细信息中找到的数量总和

订单表

|Order ID    |Username|
|1           |User 1  |
|2           |User 1  |
|3           |User 2  |

订单明细表

|OrderDetailsID| Qty| Order ID|
|1             | 50 |1        |
|2             | 20 |1        |
|3             | 30 |2        | 
|4             | 20 |3        |

我如何使用 Linq 获得按用户分组的总量?

这是我想出来的

from order in Entity.Orders
join od in Entity.OrderDetails on order.ID equals od.OrderID
where order.Status != 2
group order by new { order.Username } into users
select new StatsiticsViewClients()
{
     Username = users.Key.Username, 
     Qty = users.SelectMany(x => x.OrderDetails).Sum(x => x.Qty)
}

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    您应该对od 进行分组,而不是对order 进行分组,因为OrderDetails 包含您要求和的属性。

    而且您不需要在分组中使用匿名类型,因为您只使用一列进行分组。

    from order in Entity.Orders
    join od in Entity.OrderDetails on order.ID equals od.OrderID
    where order.Status != 2
    group od by order.Username into users
    select new StatsiticsViewClients()
    {
         Username = users.Key, 
         Qty = users.Sum(g => g.Quantity)
    }
    

    【讨论】:

      【解决方案2】:

      Group OrderDetails 然后您可以使用 g.Sum(x=> x.Qty) 以及 Group Key 字段中的用户名获取 Sum

        from order in Entity.Orders
          join od in Entity.OrderDetails
          on order.ID equals od.OrderID
          where order.Status != 2
          group OrderDetails by order.Username into g
          select new StatsiticsViewClients()
          {
               Username = g.Key.Username, 
               Qty = g.Sum(x=> x.Qty)
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-02
        相关资源
        最近更新 更多