2014-09-22 97 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