2

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

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

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

例如:

Id 查询字符串为 4,因此我们希望将Mohammad KD作为上一行,将Omid Zangene作为下一行。

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

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

4

2 回答 2

6

这个怎么样?

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();

编辑:考虑到新规范。

编辑 2:将代码修改为 not use LastOrDefault,这不适用于 LINQ to Entities。

于 2012-09-30T20:53:57.243 回答
1

试试这个:

 int id = 4;     
 var list = (from x in ctx.Table
            where x.id >= id - 1 && x.id <= id + 1
            select x).OrderBy(o -> o.name).ToList();

编辑:这将返回 ID 为 3,4 和 5 的元素。我不知道您是否真的按名称对数据库中的表进行排序,但如果您是,我认为使用循环而不是使用 linq 会更容易获取上一个和下一个元素。

更新:按名称对结果进行排序

于 2012-09-30T20:56:02.273 回答