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

Lin*_*inh 4 .net c# delegates entity-framework

Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*mes 12

没有.

实体框架需要能够查看正在尝试的所有内容.

所以,如果你只是做了这样的事情:

queryable.Where(f => DelegateFunc(f));
Run Code Online (Sandbox Code Playgroud)

DelegateFunc的定义如下所示:

public bool DelegateFunc(Foo foo)
{
   return foo.Id > 4;
}
Run Code Online (Sandbox Code Playgroud)

实体框架无法在委托内窥视,破解它并将其转换为SQL.

一切都没有丢失.

如果您的目标是重复使用常见的过滤器等,您可以执行以下操作:

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

queryable.Where(DelegateExpression);
Run Code Online (Sandbox Code Playgroud)