如何在LINQ中编写包含Select和Group语句的数据库查询?
使用LINQ实现分组聚合查询(从OrderDetail表按Item分组统计)
现有数据库表数据(OrderDetail)
| ID | Item | Qty | Amount | Date |
|---|---|---|---|---|
| 1 | Padlock | 2 | 2.00 | 09/04/2024 |
| 2 | Bolt | 1 | 5.00 | 09/04/2024 |
| 3 | Bolt | 3 | 15.00 | 10/04/2024 |
| 4 | Bolt | 1 | 5.00 | 11/04/2024 |
现有代码
[HttpGet] public object Get() { return new { Items = _context.OrderDetail.ToList(), Count = _context.OrderDetail.Count() }; }
期望结果
| Item | Qty | Amount |
|---|---|---|
| Padlock | 2 | 2.00 |
| Bolt | 5 | 25.00 |
| Spanner | 3 | 5.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
相关产品推荐
相关产品推荐

