2011-09-17 60 views
11

我有一个简单QueryOver简单QueryOver:无法识别的方法调用

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

号码字段类型为int。 此查询具有通过这种消息的运行时错误:

无法识别的方法调用:System.Int32:布尔等于(的Int32)

+1

你可以张贴'Person'的映射:

给出的代码上面被改写?你也可以尝试'.Where(p => p.Number == number' –

+0

Thanks!通过替换'=='解决的问题leiu equals。'=='和'Equals'在字段中的区别int Type ? – Ehsan

回答

27

==操作者产生一个BinaryExpression其可以被转换为SQL和.Equals()方法生成一个MethodCallExpression这显然是而不是转换为SQL。

通常二进制运算符在QueryOver和Linq中处理,但只处理几个方法调用(string.Contains,array.Contains等),所以您最好在可能的情况下使用运算符。

另外请记住,操作符/方法调用并未实际执行,但转换后的SQL语句如此,如果您有自定义覆盖/实现它们,它们可能无法按预期方式工作。

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

这节省了几个工作。谢谢 – SadullahCeran

+0

真棒解释,谢谢! –