Я полагаю, что с некоторыми поставщиками LINQ есть странность в отношении нулей.Попробуйте:
var query = db.Pages.First(x => (test != null && x.ParentId == test) ||
(test == null && x.ParentId == null));
В качестве альтернативы используйте разные запросы для разных ситуаций:
var query = test == null ? db.Pages.First(x => x.ParentId == null)
: db.Pages.First(x => x.ParentId == test);
В основном это происходит потому, что SQL обрабатывает NULL как неравный для себя, поэтому:
WHERE X = Y
все равно потерпит неудачу, если X и Y являются нулевыми значениями.Использование части == null
(с literal null) вызывает преобразование в ISNULL
или любой другой эквивалент SQL.
Я согласен, что это боль, и кто-то еще может иметьлучший обходной путь, но это может помочь вам начать работу.