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

ASP.NET Core中GroupBy分组无重复字段时如何获取分组内最新订单号

解决方法

要获取每个司机分组的最后一笔订单号,核心是对分组内的记录按判定最后订单的规则排序后取首条即可,用倒序+FirstOrDefault的写法兼容性更强,大部分EF Core数据库提供器都可以直接翻译为SQL,不会触发客户端评估。

调整后的代码

var query = context.DeliveryFinances.AsQueryable();
var grouped = await query.GroupBy(x => x.DriverId)
                        .Select(x => new 
                        { 
                            DriverId = x.Key, 
                            // 排序字段请替换为你实际判定“最后一笔订单”的字段,比如订单创建时间CreateTime、自增主键Id
                            OrderNo = x.OrderByDescending(o => o.CreateTime).FirstOrDefault().OrderNo,
                            Count = x.Count()
                        })
                        .OrderByDescending(x => x.Count)
                        .Take(10)
                        .ToListAsync();

说明

  • 原写法里分组用new { DriverId = x.DriverId}的匿名类是冗余的,直接按x.DriverId分组即可
  • 不建议直接用LastOrDefault获取分组最后一条,多数EF数据库提供器无法直接翻译该方法,会导致查询报错或者触发低效的客户端内存计算
  • 如果你没有专门的时间/主键字段判断订单顺序,可根据实际业务的排序规则替换OrderByDescending内的字段即可,完全匹配你给出的示例返回结果。

内容的提问来源于stack exchange,提问作者M.N. Waleedh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:39:03