Мое предположение - то, что это происходит из-за довольно общего атрибута DBMS - Просто, потому что две вещи являются оба пустыми, не означает, что они равны.
Для разработки немного попытайтесь выполнить эти два запроса:
SELECT * FROM TABLE WHERE field = NULL
SELECT * FROM TABLE WHERE field IS NULL
причиной "ЯВЛЯЕТСЯ ПУСТАЯ" конструкция, то, что в мире DBMS, ПУСТОМ УКАЗАТЕЛЕ! = ПУСТОЙ УКАЗАТЕЛЬ начиная со значения ПУСТОГО УКАЗАТЕЛЯ - то, что значение не определено. Начиная с ПУСТЫХ неопределенных средств Вы не можете сказать, что два нулевых значения равны, так как по определению Вы не знаете, каковы они.
, Когда Вы явно проверяете на "поле == ПУСТОЙ УКАЗАТЕЛЬ", LINQ, вероятно, преобразовывает это в "поле IS NULL". Но когда Вы используете переменную, я предполагаю, что LINQ автоматически не делает того преобразования.
Вот сообщение форума MSDN с большим количеством информации об этой проблеме.
Похож на хороший "обман", должен изменить Вашу лямбду для сходства с этим:
c => c.ParentId.Equals(categoryId)
That depends on your JPA provider. Hibernate, for example, supports current_date() function:
from MyEntity where myDateProperty > current_date()
4.6.16.3 Функции Datetime
functions_returning_datetime: = CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP
Функции datetime возвращают значение текущей даты, времени и отметка времени на сервере базы данных.