I have a simple QueryOver
var q = SessionInstance.QueryOver<Person>().Where(p => p.Number.Equals(number));
Number field type is int. This query has a runtime error by this message:
Unrecognised method call: System.Int32:Boolean Equals(Int32)
I have a simple QueryOver
var q = SessionInstance.QueryOver<Person>().Where(p => p.Number.Equals(number));
Number field type is int. This query has a runtime error by this message:
Unrecognised method call: System.Int32:Boolean Equals(Int32)
The ==
operator generates a BinaryExpression which can be converted to SQL and the .Equals()
method generates a MethodCallExpression which apparently is not converted to SQL.
Usually the binary operators are handled in QueryOver
and also in Linq but only a few method calls are handled (string.Contains
, array.Contains
, etc.) so you better use operators when possible.
Also remember that the operators/method calls are not actually executed, but converted SQL statements so if you have custom overrides/implementations for them they might not work as expected.
Given the above your code would be rewritten as:
var q = SessionInstance.QueryOver<Person>().Where(p => p.Number == number);
© 2022 - 2024 — McMap. All rights reserved.
Person
? also you can try.Where(p => p.Number == number
– Natalyanataniel