.NET 4.x Фильтрация Where не работает корректно, если передаваемый в метод аргумент parentId равен null - C#

Узнай цену своей работы

Формулировка задачи:

Никак не могу понять, почему фильтрация Where не работает корректно, если передаваемый в метод аргумент parentId равен null. Вызываю метод:
IQueryable<Node> test = GetNodes(null);
Листинг метода, не корректно выполняющего фильтрацию:
        private IQueryable<Node> GetNodes(short? parentId)
        {
            return Data.Nodes.Where(node => node.ParentId == parentId);
        }
При этом поле класса Node.ParentId полностью совпадает по типу с типом аргумента передаваемым в метод - short? Фильтрация не выполняется корректно. Методом возвращается пустая коллекция. Хотя в коллекции Data.Nodes точно есть элементы, у которых ParentId == null. Однако, если написать код метода так:
        private IQueryable<Node> GetNodes(short? parentId)
        {
            if (parentId == null)
                return Data.Nodes.Where(node => node.ParentId == null);
            else
                return Data.Nodes.Where(node => node.ParentId == parentId);
        }
То фильтрация выполняется корректно. Объясните пожалуйста почему так? Какие есть пути решения моей проблемы, или второй вариант кода метода является единственно правильным решением?

Решение задачи: «.NET 4.x Фильтрация Where не работает корректно, если передаваемый в метод аргумент parentId равен null»

textual
Листинг программы
SELECT * FROM Nodes WHERE Nodes.ParentId IS NULL

Оцени полезность:

11   голосов , оценка 4.364 из 5
Похожие ответы