У нас есть транзакционная система создания заказов.
Структура таблицы следующая:
- Заказ - информация высокого уровня
- Статус заказа - Черновик, отправлен, частично подтвержден и подтвержден
- Строки заказа - productId, количество, цена
- 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 будет выдано исключение нулевой ссылки.