Linq在多个从属表上具有左联接

时间:2019-03-11 12:36:10

标签: linq linq-to-entities

我们有一个创建订单的交易系统。 表格结构如下

  1. 订单-高级信息
  2. 订单状态-草稿,已提交,部分确认和确认
  3. OrderLines-productId,数量,价格
  4. 产品阴影-描述,成分,包装大小完整 产品级别的信息

我想通过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为空将引发空引用异常。

0 个答案:

没有答案