У меня есть метод построения выражения для запроса 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.