Entity Framework - Linq - "System.Object"유형의 상수 값을 만들 수 없습니다. 기본 유형 만

entity-framework expression-trees linq

문제

주어진 유형, 속성 및 값에 대한 linq 쿼리에 대한 표현식을 작성하는 메소드가 있습니다. 이 유형의 속성이 nullable이 아닌 한 훌륭하게 작동합니다. 다음은 내가 일하는 예제입니다 ( http://www.marcuswhitworth.com/2009/12/dynamic-linq-with-expression-trees ). 속성에서 Equals 메서드를 호출합니다. 그러나 Nullable 형식에 대한 Equals 메서드는 Nullable 형식 대신 매개 변수로 Object를 사용한다는 것을 발견했습니다. null 값을 숨기려면 GetValueOrDefault를 사용하려고했지만 EF는 해당 메서드를 지원하지 않습니다. 간단한 예제로 다음 코드는 오류를 발생시킵니다.

decimal? testVal = new decimal?(2100);
        var test = (from i in context.Leases where i.AnnualRental.Equals(testVal) select i).ToList();

그러나 Equals () 메서드 대신 ==를 사용하면 제대로 작동합니다. 나는 == 대신 Equals ()를 사용하여 코드를 변환하는 방법을 잘 모르겠습니다. 어떤 제안이라도 대단히 감사하겠습니다.

인기 답변

== 라고 말하면, NodeType이 ExpressionType.Equal BinaryExpression 을 생성합니다. http://msdn.microsoft.com/en-us/library/bb361179.aspx

.Equals(x) 라고 .Equals(x) MethodCallExpression 을 생성합니다. LinqToEntities가 Sql로 변환 할 수있는 MethodCallExpression 은 제한된 목록입니다 (예를 들어, 귀하의 꾸며지지 않은 메소드는 해당 목록에 없습니다). Nullable<T>.Equals(x) 는 분명히 해당 목록에 없습니다.

.Equals(x) 대해 말하지 마십시오 .Equals(x) .



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.