【发布时间】:2010-09-24 03:21:55
【问题描述】:
Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);
我将参数传递给 Where 方法如下:f => f.Id > 4。
我可以传递一个委托方法而不是f.Id > 4吗?
【问题讨论】:
标签: c# .net entity-framework delegates
Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);
我将参数传递给 Where 方法如下:f => f.Id > 4。
我可以传递一个委托方法而不是f.Id > 4吗?
【问题讨论】:
标签: c# .net entity-framework delegates
没有。
实体框架需要能够查看正在尝试的所有内容。
所以如果你只是做了这样的事情:
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);
【讨论】: