1

我有两节课:

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,这很重要。

4

1 回答 1

3

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

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

Session.Query<Bar>().AsExpandable()
       .Where(bar => bar.Foos.Any(foo => fooFilters.Invoke(foo)))
于 2013-02-28T23:30:35.697 回答