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

