我正在尝试获取上一个和下一个记录,但我在运行时遇到异常。我究竟做错了什么?我在互联网上找到了这个问题的解决方案。我得到了基本的想法,但我对LINQ不是很有经验。
LINQ to Entities无法识别方法'System.Linq.IQueryable
1[CXW__DAQ___Web.Models.Report] SkipWhile[Report(System.Linq.IQueryable
1 [CXW_ DAQ Web.Models.Report],System.Linq.Expressions.Expression1[System.Func
2 [CXW__DAQ _Web.Models.Report,System.Boolean]])'方法,并且他的方法无法转换为商店表达式。
这是我的相关代码。
var NextRecord = db.Reports.OrderBy(i => i.ID)
.SkipWhile(i => i.ID != id)
.Skip(1)
.First();
int nextID = NextRecord.ID;
var PrevRecord = db.Reports.OrderBy(i => i.ID)
.Reverse()
.SkipWhile(i => i.ID != id)
.Skip(1)
.Last();
int prevID = PrevRecord.ID;
答案 0 :(得分:0)
错误消息试图告诉您的是LINQ to Entities无法将IEnumerable.SkipWhile()
方法转换为SQL。您首先必须强制查询的其余部分首先使用LINQ to Objects:
var nextRecord =
db.Reports.OrderBy(i => i.ID)
.AsEnumerable()
.SkipWhile(i => i.ID != id)
.Skip(1)
.First();
这里明显的缺点是你的整个表将被订购然后读入内存。