C# Linq 2 SQL转换为外部联接

C# Linq 2 SQL转换为外部联接,c#,linq,linq-to-sql,sql-server-2012,C#,Linq,Linq To Sql,Sql Server 2012,我有一个linq到sql查询,它有几个连接。我想将其中一个转换为外部联接。问题是此查询已经有from子句。如何将此查询转换为在OrderCertification表上使用左连接而不是内部连接 以下查询不起作用导致我的应用程序崩溃: var orderSummaries = from os in DbOrder.QueryOrderSummaries().Where(os => orders.Contains(os.OrderID)) join o in dc.ORDERs on os

我有一个linq到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
    };

诀窍是使用DefaultIfEmpty返回第一个表中的所有行。看看这个例子:

当你说“导致我的应用程序崩溃”时,有什么例外?@RufusL不介意。这确实奏效了。调试器给了我一个错误,因为当我试图用修改过的代码调试我的应用程序时,调试器找不到AntiXSS库。我认为这段代码是问题所在,因为当我恢复更改并重建应用程序时,它会工作。检查示例,我认为它更好地描述了解决方案。但如果我正确理解了您想要的内容,您基本上会将所有其他联接选择到一个“表”中,然后在该表上选择外部联接OrderCertifications以获得结果。