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

执行LINQ to Entities查询获取最新RegistrationNumber时返回空数据求原因

问题分析与解决方案

首先,咱们来拆解下你当前查询的问题:

你已经用Where(g => g.GroupId == id)过滤出了指定组的所有书籍,这时候再调用GroupBy(g => g.GroupId)其实是多余的——因为结果里只会有一个分组(对应你指定的id)。而且你的查询只完成了分组操作,没有从分组里提取你需要的RegistrationNumber,这就是你拿到空结果的核心原因。

针对单个GroupId的正确写法

既然你只需要获取特定GroupId对应的最新RegistrationNumber,完全不需要分组操作,直接按以下逻辑实现即可:

  1. 过滤出目标组的所有书籍
  2. 按RegistrationNumber降序排序(最新的条目会排在最前面)
  3. 提取第一个元素的RegistrationNumber

对应的代码如下:

var latestRegistrationNumber = _context.Books
    .Where(book => book.GroupId == id)
    .OrderByDescending(book => book.RegistrationNumber)
    .Select(book => book.RegistrationNumber)
    .FirstOrDefault();
  • FirstOrDefault()会返回排序后的第一个值(也就是你要的最新注册号);如果该组没有任何书籍,会返回对应类型的默认值(比如null,具体取决于RegistrationNumber的字段类型)。

如果需要批量获取所有组的最新注册号

如果你之后有需求要一次性获取每个组的最新注册号,那分组的正确写法应该是:先按GroupId分组,再在每个分组内部找到最大的RegistrationNumber:

var groupLatestRegistrations = _context.Books
    .GroupBy(book => book.GroupId)
    .Select(group => new 
    {
        GroupId = group.Key,
        LatestRegistrationNumber = group
            .OrderByDescending(book => book.RegistrationNumber)
            .Select(book => book.RegistrationNumber)
            .FirstOrDefault()
    });

这样你就能得到一个包含每个组ID和对应最新注册号的集合了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:27:54