简单的QueryOver:无法识别的方法调用

时间:2011-09-17 13:10:21

标签: c# nhibernate queryover

我有一个简单的QueryOver

var q = SessionInstance.QueryOver<Person>().Where(p => p.Number.Equals(number));

数字字段类型为int。 此查询通过此消息发生运行时错误:

  

无法识别的方法调用:System.Int32:Boolean Equals(Int32)

1 个答案:

答案 0 :(得分:28)

==运算符生成可以转换为SQL的BinaryExpression.Equals()方法生成MethodCallExpression,显然转换到SQL。

通常二元运算符在QueryOver和Linq中处理,但只处理一些方法调用(string.Containsarray.Contains等),因此您最好尽可能使用运算符

还要记住,操作符/方法调用实际上并没有执行,而是转换后的SQL语句,所以如果你有自定义覆盖/实现,它们可能无法按预期工作。

鉴于上述情况,您的代码将被重写为:

var q = SessionInstance.QueryOver<Person>().Where(p => p.Number == number);