在另一个表达式树中的方法中使用表达式树

本文关键字:表达式 方法 另一个 | 更新日期: 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)))