SkipWhile失败,“LINQ to Entities无法识别方法......”

时间:2010-12-10 18:50:18

标签: linq-to-entities

我无法找到发生以下异常的原因。非常感谢任何帮助。

// EdcsEntities is derived from System.Data.Objects.ObjectContext
EdcsEntities db = new EdcsEntities();

var query = from i in db.Colleges
            select i;

query = query.SkipWhile<College>(x => x.CollegeID != 100);

List<College> l = query.ToList<College>();

例外:

  

LINQ to Entities无法识别该方法   “System.Linq.IQueryable 1[EDCS.ServiceLayer.DataAccess.College] SkipWhile[College](System.Linq.IQueryable 1 [EDCS.ServiceLayer.DataAccess.College]   System.Linq.Expressions.Expression 1[System.Func 2 [EDCS.ServiceLayer.DataAccess.College,System.Boolean]])'   方法,并且此方法无法转换为商店表达式。

1 个答案:

答案 0 :(得分:7)

您不能将SkipWhile与EF一起使用,因为没有好的方法可以将它们转换为SQL。由于SQL查询返回无序集(除非您使用ORDER BY),因此使用这样的谓词没有意义,因此它们不存在。

在EF中使用SkipWhile的方法是在调用之前将查询转换为AsEnumerable()的对象:

query = query.AsEnumerable().SkipWhile(x => x.CollegeID != 100);

当然你可能想做这样的事情:

query = query.OrderBy(x => x.CollegeId).Where(x => x.CollegeID > 100);