我有两个班级:
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,因为这很重要。
答案 0 :(得分:3)
您可以使用LINQKit中的Invoke()
和AsExpandable()
来执行此操作。
有了它,您的代码将如下所示:
Session.Query<Bar>().AsExpandable()
.Where(bar => bar.Foos.Any(foo => fooFilters.Invoke(foo)))