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

Entity Framework Core:如何获取上一条记录的Id与下一条记录的Id?

获取目标记录及上下相邻记录ID的解决方案

嘿,我来帮你搞定这个需求~你已经能成功获取到目标记录了,现在只需要额外写两个简单的查询就能拿到上一条和下一条记录的ID,思路很清晰:

  • 上一条记录ID:找所有ID小于当前记录ID的记录里,最大的那个ID(也就是最接近当前ID的前一条)
  • 下一条记录ID:找所有ID大于当前记录ID的记录里,最小的那个ID(也就是最接近当前ID的后一条)

结合你现有的代码,完整的实现可以这样写:

// 先获取目标记录(你的原有代码)
var property = db.properties
    .Include(x => x.category)
    .Include(y => y.subCategory)
    .Include(z => z.SecondSubCategory)
    .Include(e => e.heating)
    .Include(e => e.type)
    .Include(e => e.provience)
    .Include(e => e.city)
    .Include(e => e.street)
    .FirstOrDefault(p => p.id == id);

// 先判断目标记录是否存在,避免空引用
if (property == null)
{
    // 这里可以根据你的业务逻辑处理,比如返回NotFound结果或者抛出异常
    return;
}

// 获取上一条记录的ID
var previousId = db.properties
    .Where(p => p.id < property.id)
    .OrderByDescending(p => p.id) // 倒序取最大的那个ID
    .Select(p => p.id)
    .FirstOrDefault(); // 没有上一条的话返回默认值(比如0)

// 获取下一条记录的ID
var nextId = db.properties
    .Where(p => p.id > property.id)
    .OrderBy(p => p.id) // 正序取最小的那个ID
    .Select(p => p.id)
    .FirstOrDefault(); // 没有下一条的话返回默认值(比如0)

额外说明:

  • 这个逻辑不管你的ID是自增连续的还是非连续的都能生效,因为是基于ID的数值大小来匹配相邻记录的
  • 如果想优化性能,减少数据库查询次数,可以把这三个查询(目标记录、上ID、下ID)合并成一个,但上面的写法更直观,日常维护起来更方便
  • 如果你的业务里有其他排序规则(比如按创建时间排序而不是ID),只需要把OrderBy/OrderByDescending的字段换成对应的排序字段即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:22:28