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
相关产品推荐
相关产品推荐

