простой QueryOver: нераспознанный вызов метода - PullRequest
12 голосов
/ 17 сентября 2011

У меня есть простой QueryOver

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

Тип числового поля: int. Этот запрос имеет ошибку во время выполнения по этому сообщению:

Нераспознанный вызов метода: System.Int32: Boolean Equals (Int32)

1 Ответ

28 голосов
/ 18 сентября 2011

Оператор == создает BinaryExpression , который можно преобразовать в SQL, а метод .Equals() создает MethodCallExpression , который, по-видимому, не , преобразованный в SQL.

Обычно бинарные операторы обрабатываются в QueryOver, а также в Linq, но обрабатываются только несколько вызовов методов (string.Contains, array.Contains и т. Д.), Поэтому лучше использовать операторы, когда это возможно.

Также помните, что вызовы операторов / методов на самом деле не выполняются, а преобразуются в операторы SQL, поэтому, если у вас есть пользовательские переопределения / реализации, они могут работать не так, как ожидалось.

Учитывая вышеизложенное, ваш код будет переписан как:

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