我正在使用Linq2Sql(我的客戶停留在3.5,因此我無法遷移到實體框架)訪問SQL Server數據庫。Linq2Sql:即使單個記錄返回也總是執行LEFT JOIN
爲了提高某些情況下的性能,我將LoadOptions附加到了我的上下文中。 由於我使用編譯查詢,我無法禁用它,既無法使用,也減慢請求速度。
但有時候我想檢索數據,就好像沒有LoadOptions附加到我的上下文一樣。
作爲一個解決方法,我試圖返回不是完整的記錄,但它的投影。
實施例:
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Product>(c => c.X);
dlo.LoadWith<Product>(c => c.Y);
context.LoadOptions = dlo;
return (from product in context.Products
where ...
select product).First();
這執行像的查詢:
Select product.*, X.*, Y.* from Product Left outer join X left outer join Y where....
在這種情況下,所有是完全正常的。
我的方法依賴於這樣的事情:
return (from product in context.Products
where ...
select new MyType() { p = product.Field }).First();
執行像
Select product.Field from Product ->Left outer join X left outer join
Y<-- where....
查詢請注意LEFT OUTER在請求JOIN。
,而我希望是這樣的:
Select product.Field from Product where....
所以我想知道是否有避免這些連接的方法嗎?
非常感謝你對你的忠告,
表X和Y如何與表產品相關? X和產品以及Y和產品之間是否存在外鍵關係? –
是的,產品的外鍵在X和Y. – AFract