2011-01-19 51 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子句以不同于它们在索引中出现的顺序来指定列。