2014-09-22 102 views
0

我有这个linq到以多个连接为特征的sql查询。我想将其中的一个转换为外部联接。问题是这个查询已经有一个from子句。如何将此查询转换为在OrderCertification表上使用左连接而不是内连接?Linq 2 SQL转换为外部连接

下面的查询没有工作(由于我的应用程序崩溃):

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 
    }; 
+0

当你说'导致我的应用程序崩溃',什么是异常? – 2014-09-22 20:25:43

+0

@RufusL没关系。这实际上工作。调试器给我一个错误,因为当我试图用修改后的代码调试我的应用程序时找不到AntiXSS库。我认为这个代码是问题,因为当我恢复了更改并重新构建应用程序时,它会起作用。 – Javi 2014-09-22 20:37:47

回答

0

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

+1

查看示例,我认为它更好地描述了解决方案。但是,如果我正确地理解了你想要的内容,那么基本上将所有其他联接选择到一个“表”中,然后在该表上外部联接OrderCertifactions以获得结果。 – 2014-09-22 20:29:03