2011-01-19 48 views
4

假設如下表MyObjects實體框架4:如何執行WHERE子句秩序生成的查詢

Id (PK, int) 
DecimalField (decimal) 
TextField (nvarchar) 

我已經把一個額外的指數DecimalField

考慮以下LINQ實體查詢檢索對象:

db.MyObjects.FirstOrDefault(r => r.DecimalField == localValue1 && r.TextField == localValue2) 

因爲索引的,重要的是,EF-生成的查詢保持WHERE子句相同的屬性的順序(即DecimalField第一個和TextField秒),否則將發生表掃描並且索引是無用的。我如何強制EF在WHERE子句中保持特定順序?特設查詢和編譯查詢有什麼不同?

+0

很好的問題。 +1 – RPM1984 2011-01-19 10:24:24

+0

KristoferA的回答是正確的。爲了證明這一點,請在Management Studio中寫入兩個SQL查詢,打開「實際執行計劃」並運行查詢。如果兩個查詢沒有得到完全相同的計劃,那麼某處某處會出現問題。 – 2011-01-19 11:35:11

回答

6

不,where子句謂詞的順序無關緊要。如果有的話,SQL Server將使用適當的索引,即使你的where子句以不同於它們在索引中出現的順序來指定列。