Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);
我将参数传递给Where方法,如下所示:f => f.Id > 4
。
我可以传递委托方法而不是f.Id > 4
吗?
答案 0 :(得分:12)
没有
实体框架需要能够查看正在尝试的所有内容。
所以,如果你只是做了这样的事情:
queryable.Where(f => DelegateFunc(f));
DelegateFunc的定义如下所示:
public bool DelegateFunc(Foo foo)
{
return foo.Id > 4;
}
实体框架无法在委托内窥视,破解它并将其转换为SQL。
尽管如此,一切都没有丢失。
如果您的目标是重复使用常用过滤器等,则可以执行以下操作:
public Expression<Func<Foo, bool>> DelegateExpression{
get{
Expression<Func<Foo,bool>> expr = f => f.Id > 4;
return expr;
}
}
queryable.Where(DelegateExpression);