2010-07-22 40 views
0

我使用.NET 4和VS 2010和有同樣的問題在.NET 3.5/VS 2008選擇多一個在LINQ許多關係使用外到SQL連接

結構:
表1:調用
表2:AddressChangeRequest
表3:CallNotes

單個呼叫可以有許多AddressChangeRequests和許多CallNotes。客戶(customerKey)可以有多個呼叫。

的LINQ代碼:
回報db.Calls.Where(C => c.CustomerKey == '...')選擇( C =>新的呼叫(c.CustomerKey,c.StartTime,C .AddressChangeRequests,c.CallNotes));

呼叫是一個期望AddressChangeRequests和CallNotes列表的域對象。該代碼按預期返回調用列表,但SQL不是最優的。

上面的代碼生成SQL作爲一個從呼叫表選擇與左外連接在AddressChangeRequest表接着從CallNote表單獨SELECT查詢(一個用於每個相關聯的呼叫)

Select ... from Call as c 
LEFT OUTER JOIN AddressChangeRequest as acr ON c.id = acr.callId 

Select ... from CallNote Where callId = 123 
Select ... from CallNote Where callId = 456 
Select ... from CallNote Where callId = 789 

如果我從代碼中移除AddressChangeRequests,爲CallNote表生成一個左外連接,並且不再生成單個的Select語句。

我的問題是,使用LINQ我怎麼能生成單個SQL語句如下:

Select ... from Call as c 
LEFT OUTER JOIN AddressChangeRequest as acr ON c.id = acr.callId 
LEFT OUTER JOIN CallNote as cn ON c.id = cn.callId 
+0

假設LINQtoSQL和你正在使用DataLoadOptions.LoadWith? – Marc 2010-07-22 16:03:12

+0

對於LINQtoSQL是的,是的我已經在CallNote和AddressChangeRequest上使用了DataLoadOptions.LoadWith,啓用或禁用並沒有什麼區別。 感謝您的評論,任何其他想法? – kforbesie 2010-07-23 00:17:47

回答

0

答案是不幸的是「不」。 L2S的急切的加載支持是原始的。但是,您可以在標準查詢工具之上創建自己的版本。