Linq2SQL转换为外部联接

本文关键字:外部 转换 Linq2SQL | 更新日期: 2023-09-27 18:23:54

我有一个linq-to-sql查询,它具有多个联接。我想将其中一个转换为外部联接。问题是这个查询已经有一个from子句。如何将此查询转换为在OrderCertification表上使用左联接而不是内部联接?

以下查询不起作用(导致我的应用程序崩溃):

var orderSummaries = from os in DbOrder.QueryOrderSummaries().Where(os => orders.Contains(os.OrderID))
   join o in dc.ORDERs on os.OrderID equals o.OrderID
   join oa in dc.ORDERADDRESSes on os.OrderID equals oa.OrderID
   join d in dc.vDoctors on o.DoctorID equals d.DoctorID
   join c in dc.ORDERCERTIFICATIONs on os.OrderID equals c.OrderID into oc
   from certification in oc.DefaultIfEmpty()
   select new BatchOrderItem {
      OrderSummary = os,
      Order = o,
      ShipTo = oa,
      Prescriber = d,
      CertificationContact = certification
    };

Linq2SQL转换为外部联接

诀窍是使用DefaultIfEmpty返回第一个表中的所有行。看看这个例子:http://msdn.microsoft.com/en-us/library/bb397895.aspx