LINQ to Entities无法识别该方法(尝试获取上一个和下一个记录)

时间:2013-11-12 19:08:51

标签: c# asp.net-mvc linq entity-framework

我正在尝试获取上一个和下一个记录,但我在运行时遇到异常。我究竟做错了什么?我在互联网上找到了这个问题的解决方案。我得到了基本的想法,但我对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.Expression 1[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;

1 个答案:

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

这里明显的缺点是你的整个表将被订购然后读入内存。