Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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)

like image 585
Ehsan Avatar asked Sep 17 '11 13:09

Ehsan


1 Answers

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);
like image 117
Iulian Margarintescu Avatar answered Sep 20 '22 03:09

Iulian Margarintescu