2011-09-17 50 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

真棒解釋,謝謝! –