Практическое руководство. Обработка значений NULL в выражениях запросов (Руководство по программированию в C#)
В этом примере показана обработка значений NULL, которые могут встретиться в исходной коллекции.Коллекция объектов, например IEnumerable<T>, может содержать элементы, значение которых равно NULL.Если исходная коллекция равняется NULL или содержит элемент, значение которого равно NULL, а запрос не обрабатывает значения NULL, то при выполнении запроса возникнет исключение NullReferenceException.
Пример
В код можно включить механизм защиты, позволяющий избежать появления ссылок на значения NULL, как показано в следующем примере.
var query1 =
from c in categories
where c != null
join p in products on c.ID equals
(p == null ? null : p.CategoryID)
select new { Category = c.Name, Name = p.Name };
В приведенном выше примере предложение where позволяет отфильтровать все элементы NULL в последовательности категорий.Такой подход не зависит от проверки на значения NULL в предложении join.Условное выражение в этом примере работает потому, что значение Products.CategoryID имеет тип int? что является сокращенной записью для Nullable<int>.
Если в предложении join только один из ключей сравнения имеет тип значения, допускающий значения NULL, можно привести второй ключ в выражении запроса к типу, допускающему значение NULL.В следующем примере предполагается, что EmployeeID — столбец значений типа int?:
void TestMethod(Northwind db)
{
var query =
from o in db.Orders
join e in db.Employees
on o.EmployeeID equals (int?)e.EmployeeID
select new { o.OrderID, e.FirstName };
}
См. также
Ссылки
Типы, допускающие значения NULL (Руководство по программированию на C#)
Основные понятия
Выражения запросов LINQ (Руководство по программированию на C#)