Я использую LINQ to SQL для обработки запросов к базе данных для приложения, над которым я работаю.
Для целей этого примера представьте, что у меня есть несколько таблиц, например
- Company
- Product
- Item
- Order
и пусть a Company
имеет 0 или более Products
, a Product
имеет 0 или более Items
, а Item
имеет 0 или более Orders
.
Теперь давайте, чтобы я получил список Orders
, что-то вроде:
IQueryable<Order> myOrders = GetMyOrders();
Теперь скажем, что я хочу запросить заказы для конкретного Company.Name
, но имею ситуацию, когда каждый родительский идентификатор таблицы может быть NULL
(я знаю, что это не кажется логичным с моими данными примера, но это просто пример)
Сделав предположение, что нет родительских идентификаторов NULL
, я мог бы это сделать:
var filteredOrders = myOrders.Where(x => x.Item.Product.Company.Name == "Company1");
Это прекрасно работает, потому что может быть NULL
значений родительского идентификатора, мне нужно проверить каждый родительский объект, чтобы убедиться, что он не является NULL
перед запросом следующего родителя (иначе я получу исключение). Поэтому я делаю что-то вроде:
var filteredOrders = myOrders.Where(x =>
x.Item != null &&
x.Item.Product != null &&
x.Item.Product.Company != null &&
x.Item.Product.Company.Name == "Company1");
Итак, мой вопрос: Есть ли лучший способ (с точки зрения удобочитаемости и простоты кодирования) сделать это, чем включать все нулевые проверки? Любой нулевой родитель, найденный на этом пути, должен привести к исключению из результирующего списка.
Пожалуйста, не предлагайте никаких предупреждений о недопустимых родителях, база данных не будет меняться (и в любом случае она абсолютно верна)