我可以在Entity Framework的Where方法中使用自定义委托方法吗?

时间:2010-09-24 03:21:56

标签: c# .net entity-framework delegates

Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);

我将参数传递给Where方法,如下所示:f => f.Id > 4。 我可以传递委托方法而不是f.Id > 4吗?

1 个答案:

答案 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);