Оператор ==
создает BinaryExpression , который можно преобразовать в SQL, а метод .Equals()
создает MethodCallExpression , который, по-видимому, не , преобразованный в SQL.
Обычно бинарные операторы обрабатываются в QueryOver
, а также в Linq, но обрабатываются только несколько вызовов методов (string.Contains
, array.Contains
и т. Д.), Поэтому лучше использовать операторы, когда это возможно.
Также помните, что вызовы операторов / методов на самом деле не выполняются, а преобразуются в операторы SQL, поэтому, если у вас есть пользовательские переопределения / реализации, они могут работать не так, как ожидалось.
Учитывая вышеизложенное, ваш код будет переписан как:
var q = SessionInstance.QueryOver<Person>().Where(p => p.Number == number);