2

我有一组已编译的表达式,我将它们组合成一个表达式,因为我想动态构建我的 linq 查询。请参阅ExpressionTree Compile() 方法生成堆栈溢出异常 ,因为我使用编译表达式以防止堆栈溢出,因为在我的计算机中,当查询包含超过 7000 个表达式时,它会抛出此异常。)然后我使用新生成的表达式和将它传递给我的 FindAll 方法。问题,NHibernate 无法执行查询并说:

无法将“nhibernate.hql.ast.parameter”类型的对象转换为“nhibernate.hql.ast.hqlboleanexpression”类型

public IList<T> FindAll(Expression<Func<T, bool>> criteria)
{
     return SessionFactory.GetCurrentSession()
                          .QueryOver<T>()
                          .Where(criteria)
                          .List();
}

我调试并发现nhibernate试图将编译的表达式转换为文件HqlTreeNode中的布尔表达式(方法:HqlTreeNodeExtensions.AsBooleanExpression(this HqlTreeNode node)这当然不起作用。那我应该使用什么解决方案?

标准变量如下所示:

(Invoke(value(System.Func`2[Something.SomeEntity,System.Boolean]) // this don't work

作为参考,如果它没有被编译,它看起来像这样:

([someEntity].UserID == 1) // this works

谢谢你。

4

0 回答 0