2010-10-20 58 views
3

我有兩個實體:主和細節。 當我詢問他們,結果查詢到數據庫是:實體框架4生成的查詢加入完整表

SELECT [Extent2]."needed columns listed here", [Extent1]."needed columns listed here" 
FROM (SELECT * [Details]."all columns listed here"... 
    FROM [dbo].[Details] AS [Details]) AS [Extent1] 
LEFT OUTER JOIN [dbo].[Master] AS [Extent2] ON [Extent1].[key] = [Extent2].[key] 
WHERE [Extent1].[filterColumn] = @p__linq__0 

我的問題是:爲什麼沒有在過濾器在內部查詢?我怎樣才能得到這個查詢?我已經嘗試了很多EF和Linq表達式。

我需要的是這樣的:

SELECT <anything needed> 
    FROM Master LEFT JOIN Details ON Master.key = Details.Key 
WHERE filterColumn = @param 

我有兩個表中一個完整的順序掃描,並在我的生產環境,我在每個表中的行milions。

非常感謝!

+0

你能告訴你的LINQ語句,視圖? – RPM1984 2010-10-20 22:54:16

+0

不確定:在ctx.Master.Details 變種查詢=從米中ctx.Master 從d其中d.filter1 == someVar1 && m.filter2 == someVar2 選擇新的{米,d}; – Fravio 2010-10-22 10:19:41

回答

2

有時實體框架不會產生最佳查詢。您可以執行以下幾項操作來進行優化。

  1. 修改LINQ聲明(與 LINQPad測試)
  2. Create a stored proc and map the stored proc to return an entity
  3. 創建處理聯接和視圖映射到一個新的 實體
+0

感謝您的回覆,但我收到了與其他陳述相同的「在SUBQUERY中選擇整個表」。我注意到,如果我用一個表達式來篩選兩個表,sql查詢就有這個問題。 – Fravio 2010-10-21 10:12:10

+0

查詢優化器很好的查詢。我有一個可喜的表現。再次感謝。 – Fravio 2010-10-21 16:22:47