Linq с левым соединением на нескольких зависимых таблицах - PullRequest
0 голосов
/ 11 марта 2019

У нас есть транзакционная система создания заказов. Структура таблицы следующая:

  1. Заказ - информация высокого уровня
  2. Статус заказа - Черновик, отправлен, частично подтвержден и подтвержден
  3. Строки заказа - productId, количество, цена
  4. productshadow - описание, ингредиенты, размер упаковки информация на уровне продукта

Я хочу получить информацию о заказе для другого статуса с помощью запроса linq.

  var orderLines = (from submittedOrderLine in submittedOrderLines
                  join submittedShadow in submittedShadows
                  on submittedOrderLine.OrderLineId equals submittedShadow.OrderLineID
                  join partialConfirmedOrderLine in partialConfirmedOrderLines
                  on submittedOrderLine.productId equals partialConfirmedOrderLine.productId into partialConfirmedOrder
                  from partialConfirmed in partialConfirmedOrder.DefaultIfEmpty()
                  join confirmedOrderLine in confirmedOrderLines
                  on submittedOrderLine.productId equals confirmedOrderLine.productId into confirmedOrder
                  from confirmed in confirmedOrder.DefaultIfEmpty()
                  join confirmedShadow in confirmedShadows
                  on confirmed.OrderLineId equals confirmedShadow.OrderLineID
                  select new OrderEntity
                  {
                      OrderNumber = orderId,
                      productId = submittedOrderLine.productId,
                      Description = submittedShadow.Description,
                      SubmittedQuantity = qty
                      SubmittedPrice = submittedOrderLine.ProductPrice 
                      confirmed 
                }).Tolist()

Я пытаюсь использовать один и тот же запрос для всех состояний. Мне нужно объединить строки заказа и тени продукта на основе lineID. Если ордер находится в частично подтвержденном состоянии, подтвержденные линии и тени будут пустыми, и будет выдано исключение null ref.

Если бы мне пришлось соединить представленные строки с подтвержденными линиями, я мог бы использовать левое соединение и обработать его. Однако я не уверен, что делать, когда мне нужно соединить подтвержденные линии и подтвержденные тени, так как оба будут пустыми. подтверждено. При пустом значении OrderLineId будет выдано исключение нулевой ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...