我有一个简单的QueryOver
var q = SessionInstance.QueryOver<Person>().Where(p => p.Number.Equals(number));
数字字段类型为int。 此查询通过此消息发生运行时错误:
无法识别的方法调用:System.Int32:Boolean Equals(Int32)
答案 0 :(得分:28)
==
运算符生成可以转换为SQL的BinaryExpression,.Equals()
方法生成MethodCallExpression,显然未转换到SQL。
通常二元运算符在QueryOver
和Linq中处理,但只处理一些方法调用(string.Contains
,array.Contains
等),因此您最好尽可能使用运算符
还要记住,操作符/方法调用实际上并没有执行,而是转换后的SQL语句,所以如果你有自定义覆盖/实现,它们可能无法按预期工作。
鉴于上述情况,您的代码将被重写为:
var q = SessionInstance.QueryOver<Person>().Where(p => p.Number == number);