通过 Id 和 Name 获取下一个和上一个 sql 行,EF?

2024-02-18

假设我们在 SQL Server 表中有以下数据(按名称排序):

Id   Name        LName
-------------------------
5   Abbas        Dayyan
3   Mohammad     KD
4   Nima         Ahmad
1   Omid         Zangene
2   Pedram       Ahmadi

我们有一个 Id 查询字符串,我们想从 Id 获取下一行和上一行(如果存在)。

e.g :

Id 查询字符串是 4,所以我们想要得到穆罕默德·KD作为上一行和奥米德·赞吉内作为下一行。

您能指导我如何使用 LINQ to Entity Framework 做到这一点吗?

Edit:
实际上,表行数约为 100 万行。
默认情况下,表行不按名称排序,需要按名称对结果进行排序。


这个怎么样?

var result = (from person in db.People
              where person.Id == id
              let ordered = db.People.OrderBy(p => p.Name)                  
              let reversed = db.People.OrderByDescending(p => p.Name)                  
              let previous = reversed.SkipWhile(p => p.Id != id).Skip(1).FirstOrDefault()
              let next = ordered.SkipWhile(p => p.Id != id).Skip(1).FirstOrDefault()
              select new { previous, next }).First();

Edit:考虑到新的规格。

Edit 2:修改代码不使用LastOrDefault,它不适用于 LINQ to Entities。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Id 和 Name 获取下一个和上一个 sql 行,EF? 的相关文章

随机推荐