Ehsan Ehsan -4 years ago 127
C# Question

Problem in simple QueryOver : Unrecognised method call

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)

Answer Source

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);
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download