我使用.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
假設LINQtoSQL和你正在使用DataLoadOptions.LoadWith? – Marc 2010-07-22 16:03:12
對於LINQtoSQL是的,是的我已經在CallNote和AddressChangeRequest上使用了DataLoadOptions.LoadWith,啓用或禁用並沒有什麼區別。 感謝您的評論,任何其他想法? – kforbesie 2010-07-23 00:17:47