我有一个简单QueryOver简单QueryOver:无法识别的方法调用
var q = SessionInstance.QueryOver<Person>().Where(p => p.Number.Equals(number));
号码字段类型为int。 此查询具有通过这种消息的运行时错误:
无法识别的方法调用:System.Int32:布尔等于(的Int32)
我有一个简单QueryOver简单QueryOver:无法识别的方法调用
var q = SessionInstance.QueryOver<Person>().Where(p => p.Number.Equals(number));
号码字段类型为int。 此查询具有通过这种消息的运行时错误:
无法识别的方法调用:System.Int32:布尔等于(的Int32)
的==
操作者产生一个BinaryExpression其可以被转换为SQL和.Equals()
方法生成一个MethodCallExpression这显然是而不是转换为SQL。
通常二进制运算符在QueryOver
和Linq中处理,但只处理几个方法调用(string.Contains
,array.Contains
等),所以您最好在可能的情况下使用运算符。
另外请记住,操作符/方法调用并未实际执行,但转换后的SQL语句如此,如果您有自定义覆盖/实现它们,它们可能无法按预期方式工作。
var q = SessionInstance.QueryOver<Person>().Where(p => p.Number == number);
这节省了几个工作。谢谢 – SadullahCeran
真棒解释,谢谢! –
你可以张贴'Person'的映射:
给出的代码上面被改写?你也可以尝试'.Where(p => p.Number == number' –
Thanks!通过替换'=='解决的问题leiu equals。'=='和'Equals'在字段中的区别int Type ? – Ehsan