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