2011-09-17 2 views
11

나는간단한 QueryOver : 인식 할 수없는 메소드 호출

var q = SessionInstance.QueryOver<Person>().Where(p => p.Number.Equals(number)); 

번호 필드 유형은 int이며 간단한 QueryOver 있습니다.

인식 할 메소드 호출 : 선택 System.Int32 : 이 질의 메시지함으로써 런타임 에러 갖는 부울 같음 (INT32)

+1

당신이'Person'의 매핑을 게시 할 수 있습니다로

는 코드 위가 재 작성 될 것입니다 감안할? 또한 당신은'.phere => p.Number == number'를 시도 할 수 있습니다. –

+0

감사합니다! = ''== 'leiu equals'에 의해 해결 된 문제. int 유형에 따라 '=='와 'Equals' ? – Ehsan

답변

27

== 연산자는 SQL 및 변환 할 수있는 BinaryExpression 생성을 .Equals() 메서드는 이 아니고이 SQL로 변환 된 MethodCallExpression을 생성합니다.

보통 이진 연산자는 012q과 Linq에서도 처리되지만 소수의 메서드 호출 (string.Contains, array.Contains 등) 만 처리되므로 가능하면 연산자를 사용하는 것이 좋습니다.

연산자/메소드 호출은 실제로 실행되지 않지만 변환 된 SQL 문이므로 사용자 정의 재정의/구현이 예상대로 작동하지 않을 수 있습니다.

var q = SessionInstance.QueryOver<Person>().Where(p => p.Number == number); 
+0

그 덕분에 여기에 몇 가지 작업을 저장했습니다. 감사합니다 – SadullahCeran

+0

굉장한 설명, 감사합니다! –

관련 문제