Построение Expression с использованием метода Expression.NotEqual для свойства, допускающего значение NULL. - PullRequest
0 голосов
/ 15 мая 2018

Я строю запросы, используя построитель выражений.Тем не менее, каждый раз, когда я добавляю следующее выражение, я получаю сообщение об ошибке:

Expression.NotEqual("TableProperty", constant)

Ошибка: «Набор символов не распознается как действительное время. Индекс 0 начинается с неизвестного слова».

Когда я выполняю аналогичный запрос, который такой же, за исключением того, что я использую Expression.Equals, он не возвращает эту ошибку.

Дальнейшая проверка ошибки говорит мне, что проблема возникает в DateTime.Parse().Таким образом, похоже, что нынешней структуры построителя запросов недостаточно для этого оператора с типом NULL.

Кто-нибудь знает хорошее решение этой проблемы?

1 Ответ

0 голосов
/ 16 мая 2018

Я немного поковырялся, и все заработало вот так (я полагаю, это также ясно объясняет, о чем я спрашивал)

 if (member.Type.IsGenericType && member.Type.GetGenericTypeDefinition() == typeof(Nullable<>))
 {
       var isNullCheck = Expression.Equal(member, Expression.Convert(Expression.Constant(null), member.Type));
       return Expression.Or(isNullCheck, Expression.NotEqual(Expression.Property(member, "HasValue"), constant));
 }
 return Expression.NotEqual(Expression.Property(member, "HasValue"), constant);

Переменная-член здесь относится к TableProperty

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...