Подтвердить что ты не робот

Простой QueryOver: вызов нераспознанного метода

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

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

Тип поля ввода - int. Этот запрос имеет сообщение об ошибке выполнения:

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

4b9b3361

Ответ 1

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

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

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

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

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