0

我正在尝试获取上一条和下一条记录,但在运行时出现异常。我究竟做错了什么?我在互联网上找到了解决我的问题的方法。我得到了基本的想法,但我对 LINQ 不是很有经验。

LINQ to Entities 无法识别方法 'System.Linq.IQueryable 1[CXW__DAQ___Web.Models.Report] SkipWhile[Report(System.Linq.IQueryable1[CXW_ DAQ Web.Models.Report],System.Linq.Expressions.Expression 1[System.Func2[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;
4

1 回答 1

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

这里明显的缺点是您的整个表将被排序然后读入内存。

于 2013-11-12T19:12:11.707 回答