Могу ли я использовать собственный метод делегата в методе Where Entity Framework? - PullRequest
4 голосов
/ 24 сентября 2010
Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);

Я передаю параметр методу Where следующим образом: f => f.Id > 4. Могу ли я передать метод делегата вместо f.Id > 4?

1 Ответ

12 голосов
/ 24 сентября 2010

номер

Entity Framework должен уметь видеть все, что предпринимается.

Так что, если вы просто сделали что-то вроде этого:

queryable.Where(f => DelegateFunc(f));

Где определение DelegateFunc выглядит так:

public bool DelegateFunc(Foo foo)
{
   return foo.Id > 4;
}

Entity Framework не имеет возможности заглянуть внутрь делегата, взломать его и преобразовать в SQL.

Не все еще потеряно.

Если ваша цель состоит в том, чтобы повторно использовать общие фильтры и т. Д., Вместо этого вы можете сделать что-то вроде этого:

public Expression<Func<Foo, bool>> DelegateExpression{
   get{
       Expression<Func<Foo,bool>> expr = f => f.Id > 4;
       return expr;
   }
}

queryable.Where(DelegateExpression);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...