我可以在Entity Framework的Where方法中使用自定义委托方法吗?
Where(this IQueryable source, Expression<Func> predicate);
我将参数传递给Where方法,如下所示: f => f.Id > 4
。 我可以传递委托方法而不是f.Id > 4
吗?
没有。
entity framework需要能够查看正在尝试的所有内容。
所以,如果你只是做了这样的事情:
queryable.Where(f => DelegateFunc(f));
DelegateFunc的定义如下所示:
public bool DelegateFunc(Foo foo) { return foo.Id > 4; }
entity framework无法在委托内窥视,破解它并将其转换为SQL。
一切都不会丢失。
如果你的目标是重新使用常见的filter等,你可以这样做:
public Expression> DelegateExpression{ get{ Expression> expr = f => f.Id > 4; return expr; } } queryable.Where(DelegateExpression);