Entity Framework - Linq - невозможно создать постоянное значение типа «System.Object». Только примитивные типы

entity-framework expression-trees linq

Вопрос

У меня есть метод построения выражения для запроса linq для заданного типа, свойства и значения. Это прекрасно работает, пока свойство типа не равно NULL. Вот пример, с которого я работаю ( http://www.marcuswhitworth.com/2009/12/dynamic-linq-with-expression-trees ). Я вызываю метод Equals для свойства. Однако я обнаружил, что метод Equals для типов Nullable принимает объект как параметр вместо типа Nullable. Я попытался использовать GetValueOrDefault, чтобы скрыть нулевые значения, но EF не поддерживает этот метод. В качестве простого примера следующий код вызовет ошибку:

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

Однако если вы используете == вместо метода Equals (), он будет работать нормально. Я не уверен, как преобразовать код для использования == вместо Equals (). Любые предложения будут высоко оценены.

Популярные ответы

Если вы скажете == , вы BinaryExpression с NodeType как ExpressionType.Equal . http://msdn.microsoft.com/en-us/library/bb361179.aspx

Если вы говорите .Equals(x) , вы генерируете MethodCallExpression . MethodCallExpression которое LinqToEntities может преобразовывать в Sql, является ограниченным списком (например, ни один из ваших собственных недекоратированных методов в этом списке). Nullable<T>.Equals(x) по-видимому, не входит в этот список.

Не говорите .Equals(x) в LinqToEntities.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему