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

使用EF Core实现分组后获取每组最后一条记录的问题求助

你遇到的报错核心原因有两点:一是GroupBy后的筛选逻辑错误,你需要取每组最大的LocationModelId对应的记录,而非UserModelId;二是原有写法的GroupBy用法不符合EF Core的LINQ转SQL规则,无法被翻译为有效SQL。

以下是两种可正常翻译执行的实现方案:

方案1:兼容所有EF Core版本(对应你写的第一段IN子查询SQL)

该方案直接生成你验证过的子查询SQL,性能稳定,兼容全版本EF Core:

var locationDetails = _context.Location
    .Where(x => _context.Location
        .GroupBy(p => p.UserModelId)
        .Select(g => g.Max(l => l.LocationModelId))
        .Contains(x.LocationModelId))
    .OrderBy(p => p.DateCreated)
    .ToList();

方案2:简洁写法(EF Core 6及以上版本支持)

该写法更直观,EF Core 6+可直接翻译为高效SQL,无需客户端计算:

var locationDetails = _context.Location
    .GroupBy(p => p.UserModelId)
    // 每组按主键倒序排列,取第一条就是该组ID最大的最新记录
    .Select(g => g.OrderByDescending(l => l.LocationModelId).FirstOrDefault())
    .OrderBy(p => p.DateCreated)
    .ToList();

注意:不要为了规避报错直接加AsEnumerable/ToList把计算放到客户端,数据量大时会出现严重性能问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:54:03