simple QueryOver : Unrecognised method call
Asked Answered
S

1

12

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)

Slash answered 17/9, 2011 at 13:10 Comment(2)
can you post the mapping of Person? also you can try .Where(p => p.Number == numberNatalyanataniel
Thanks! The Problem resolved by replacement '==' leiu equals. What is different between '==' and 'Equals' in field by int Type?Slash
F
30

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);
Fai answered 18/9, 2011 at 7:19 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.