假设我们在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万
默认情况下,表行没有按名称排序,wa需要按名称对结果进行排序。
答案 0 :(得分:5)
这个怎么样?
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:将代码修改为不使用LastOrDefault
,这不适用于LINQ to Entities。
答案 1 :(得分: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获取上一个和下一个元素。
更新:按名称排序结果