2010-08-03 171 views
0

急切地加載Linq2Sql中的實體

我試圖用LoadWith和AssociateWith DataLoadOptions加載實體及其相關屬性(基本一對多)。但是,在查看生成的SQL之後,我注意到由LoadWith生成的語句都是Left Outer Joins。

因此,下面的代碼會生成所有左外連接以獲取關聯屬性的數據。這是爲什麼?是否有任何方法讓LoadWith生成內部連接。我知道我可以通過一個簡單的「Linq join」來實現,但是,我喜歡LoadWith語法的簡潔和簡單。在此先感謝

dataLoadOptions.LoadWith(Of TCustomer)(Function(c) c.Orders) 
dataLoadOptions.LoadWith(Of TOrder)(Function(o) o.Products) 
dataLoadOptions.LoadWith(Of TProduct)(Function(p) p.ProductTranslations) 
dataLoadOptions.AssociateWith(Of TProduct)(Function(c) c.ProductTranslations.Where(Function(t) t.Language = "En")) 
+0

。 LINQ to SQL生成外部連接似乎很合理,因爲在內部連接的情況下,沒有訂單的客戶將無法獲取。也許你應該解釋你想達到的目標。 – Steven 2010-08-03 14:01:30

+0

對不起,我應該更清楚。我想要的是恢復所有客戶的英文產品翻譯存在的訂單。至於外連接,我認爲Linq應該允許我明確地構造外連接或內連接。對不起如果這仍然不清楚。 – Buzzer 2010-08-03 18:19:53

回答

0

所有客戶的訂單,這你爲什麼要內部連接的英文產品存在翻譯

dataLoadOptions.AssociateWith<TCustomer>(c => c.Orders 
    .Where(o => o.Products 
     .SelectMany(p => p.ProductTranslations) 
     .Any(pt => pt.Language == "En") 
) 
); 
+0

這使我走向了正確的道路。感謝大衛的信息! – Buzzer 2010-12-06 21:39:07