You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LINQ中编写包含Select和Group语句的数据库查询?

使用LINQ实现分组聚合查询(从OrderDetail表按Item分组统计)

现有数据库表数据(OrderDetail)

IDItemQtyAmountDate
1Padlock22.0009/04/2024
2Bolt15.0009/04/2024
3Bolt315.0010/04/2024
4Bolt15.0011/04/2024

现有代码

[HttpGet]
public object Get()
{
    return new { Items = _context.OrderDetail.ToList(), Count = _context.OrderDetail.Count() };
}

期望结果

ItemQtyAmount
Padlock22.00
Bolt525.00
Spanner35.00

解决方案:LINQ分组聚合查询

你需要通过GroupBy按Item分组,再用Sum聚合每组的Qty和Amount,最后选择目标字段。以下是两种常用写法:

1. 查询语法(类SQL风格)

[HttpGet]
public object Get()
{
    var groupedItems = from od in _context.OrderDetail
                       group od by od.Item into itemGroup
                       select new 
                       {
                           Item = itemGroup.Key,
                           Qty = itemGroup.Sum(od => od.Qty),
                           Amount = itemGroup.Sum(od => od.Amount)
                       };

    return new { Items = groupedItems.ToList(), Count = groupedItems.Count() };
}

2. 方法语法(链式调用风格)

[HttpGet]
public object Get()
{
    var groupedItems = _context.OrderDetail
                               .GroupBy(od => od.Item)
                               .Select(itemGroup => new 
                               {
                                   Item = itemGroup.Key,
                                   Qty = itemGroup.Sum(od => od.Qty),
                                   Amount = itemGroup.Sum(od => od.Amount)
                               });

    return new { Items = groupedItems.ToList(), Count = groupedItems.Count() };
}

关键逻辑说明

  • GroupBy(od => od.Item):以Item字段为分组依据,每个分组的Key对应Item名称
  • Sum(od => od.Qty):计算当前分组内所有记录的Qty总和
  • Sum(od => od.Amount):计算当前分组内所有记录的Amount总和

内容的提问来源于stack exchange,提问作者Milie24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:07:37