Я использую LINQ to SQL для обработки запросов к базе данных для приложения, над которым я работаю.Автоматическая проверка связей NULL с запросами LINQ
Для целей этого примера, представьте, у меня есть несколько таблиц, как так
- Company
- Product
- Item
- Order
и позволяет сказать Company
имеет 0 или более Products
, Product
имеет 0 или более Items
, и Item
имеет 0 или больше Orders
.
Теперь давайте так я получил список Orders
, что-то вроде:
IQueryable<Order> myOrders = GetMyOrders();
Теперь давайте говорить, что я хочу, чтобы запросить заказы для конкретного Company.Name
, но есть ситуации, когда каждая таблица родитель ID может быть 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");
Так что мой вопрос: Есть ли лучший способ (с точки зрения читабельности и легкости кодирования), чтобы сделать это, чем того, чтобы включать в себя все нулевые чеки? Любые нулевые родители, найденные на этом пути, должны привести к исключению из результирующего списка.
Пожалуйста, никаких предложений по предотвращению неопределенные родителей, база данных не будет не меняется (и это вполне допустимо в любом случае)
Лучше, чем у исполнителя? Я так не думаю. Я вообще не могу думать, что вы можете избавиться от всех этих «нулевых» проверок. Лучше по отношению к более красивому коду? Я бы пошел с предложением Лонли-Локли. – InBetween
@InBetween: Извините, когда я говорю лучше, я имел в виду больше для удобочитаемости. Но имея в виду мой комментарий к сообщению Lonli-Lokli, где я упомянул о желаемом, чтобы в конечном итоге запустить его как SQL-запрос, а не сначала возвращать все результаты. – musefan
Звучит как идеальное приложение для внутренних объединений, которое будет уничтожать все элементы с нулевыми ссылками , Присоедините все таблицы и отфильтруйте результат по названию компании. (Но это не будет более читаемым) – Stephan