我有一個簡單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