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

时间:2013-02-28 20:57:26

标签: c# nhibernate expression-trees

我有两个班级:

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 Expression,还是有其他方法?

我对表达式树操作知之甚少,有人能指出我正确的方向吗?

我正在使用框架3.5,因为这很重要。

1 个答案:

答案 0 :(得分:3)

您可以使用LINQKit中的Invoke()AsExpandable()来执行此操作。

有了它,您的代码将如下所示:

Session.Query<Bar>().AsExpandable()
       .Where(bar => bar.Foos.Any(foo => fooFilters.Invoke(foo)))