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

对TestPart模型最后一条数据做条件筛选并获取其Id

解决你的TestPart查询问题

你当前的查询逻辑顺序有问题哦——你是先取了Id最大的那条记录,再去判断它是否符合条件,这会导致如果这条记录不满足筛选要求,就拿不到结果,而不是从所有符合条件的记录里找最后一条。

正确的思路应该是先筛选出所有符合条件的TestPart,再从中取Id最大的那条的Id,下面是调整后的代码:

var lastMatchingId = context.TestPart
    .Where(tp => tp.TestId == 100 
                 && tp.Status == 1 
                 && tp.Jobs.All(j => j.Type == "Recurring"))
    .OrderByDescending(tp => tp.Id)
    .Select(tp => tp.Id)
    .FirstOrDefault();

代码细节说明:

  • Where筛选:先过滤出所有满足要求的记录:TestId等于100、Status等于1,并且关联的所有Jobs的Type都是"Recurring"(All方法会确保集合里每一个Job都符合Type要求,不会漏掉任何一条不符合的Job)
  • OrderByDescending排序:把符合条件的记录按Id从大到小排序,这样排在第一位的就是你要的“最后一条”记录
  • Select(tp => tp.Id):只选择Id字段,避免加载整个TestPart实体,能有效提升查询性能
  • FirstOrDefault():获取排序后的第一条记录的Id,如果没有符合条件的记录,会返回int的默认值0,不会抛出异常(如果确定一定有匹配项,也可以用First(),但FirstOrDefault()的容错性更强)

这个写法在EF Core 3.0+中会被正确转换成SQL语句,所有筛选和排序都会在数据库端完成,不会占用过多应用端内存。

内容的提问来源于stack exchange,提问作者I Love Stackoverflow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:18:30