在另一个表达式树中的方法中使用表达式树
本文关键字:表达式 方法 另一个 | 更新日期: 2023-09-27 18:01:49
我有两个类:
class Foo
{
string Name
}
class Bar
{
IList<Foo> Foos;
}
和下面的表达式树:
var fooFilters = (Expression<Func<Foo, bool>>)(foo => foo.Name == "baz");
在NHibernate中我可以这样写:
Session.Query<Bar>().Where(bar => bar.Foos.Any(foo => foo.Name == "baz"));
它成功了。
虽然,我不能写:
Session.Query<Bar>().Where(bar => bar.Foos.Any(fooFilters));
这是一个编译错误,因为IEnumerable.Any
不期望Expression<TDelegate>
。
有可能实现吗?我必须重写fooFilters表达式,还是有另一种方式?
我对表达式树操作知之甚少,有人能给我指出正确的方向吗?
我正在使用框架3.5,因为这很重要。
您可以使用LINQKit中的Invoke()
和AsExpandable()
来完成此操作。
有了它,你的代码看起来像这样:
Session.Query<Bar>().AsExpandable()
.Where(bar => bar.Foos.Any(foo => fooFilters.Invoke(foo)))