У меня есть метод расширения следующим образом:
public static bool SatisfiesSomeCondition(this Post post, SomeObj someObj)
{
return post.SomeObjId == someObj.SomeObjId;
}
И я пытаюсь использовать его так:
var query = ctx.Posts.Where(p => p.SatisfiesSomeCondition(someObj)).ToList();
Но я получаю ошибку:
LINQ to Entities не распознает метод «Boolean SatisfiesSomeCondition (xx.xx.xx.Post, xx.xx.xx.SomeObj)», и этот метод нельзя преобразовать в выражение хранилища.
Если я изменю запрос на:
var query = ctx.Posts.Where(p => p.SomeObjId == someObj.SomeObjId).ToList();
, который идентичен методу.
Он отлично работает и выполняет ожидаемый T-SQL.
Почему мой первый запрос не работает?Это статический метод, разве он не может понять, как создать дерево выражений?(например, фильтр WHERE).Конечно, мне не нужно сначала материализовать запрос?(это означает, что записи, которые я не хочу возвращать по проводам, и я делаю здесь пейджинг / упорядочивание, так что это не вариант).
Конечно, я могу просто пойти с тем, что работает (например, выше), но метод SatisfiesSomeCondition
- это существующий метод, используемый во всем домене, и я хочу повторно использовать эту функциональность, а не дублировать ее.
Есть идеи?