SkipWhile завершается с ошибкой «LINQ to Entities не распознает метод ...» - PullRequest
4 голосов
/ 10 декабря 2010

Я не могу найти, почему возникает следующее исключение.Любая помощь приветствуется.

// 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 Ответ

8 голосов
/ 13 декабря 2010

Вы не можете использовать SkipWhile с EF, потому что нет хорошего способа перевести их в SQL. Поскольку запросы SQL возвращают неупорядоченные наборы (если вы не используете ORDER BY), не имеет смысла использовать подобные предикаты, поэтому они не существуют.

Способ использования SkipWhile в EF - просто превратить запрос в объекты с помощью AsEnumerable() перед его вызовом:

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

Конечно, вы, вероятно, хотите сделать что-то вроде этого:

query = query.OrderBy(x => x.CollegeId).Where(x => x.CollegeID > 100);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...