Подтвердить что ты не робот

Автоматическая проверка связей NULL с запросами LINQ

Я использую 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");

Итак, мой вопрос: Есть ли лучший способ (с точки зрения удобочитаемости и простоты кодирования) сделать это, чем включать все нулевые проверки? Любой нулевой родитель, найденный на этом пути, должен привести к исключению из результирующего списка.

Пожалуйста, не предлагайте никаких предупреждений о недопустимых родителях, база данных не будет меняться (и в любом случае она абсолютно верна)

4b9b3361

Ответ 1

Известны патрены (см. Шаблон объекта Null). Также вы можете прочитать this article