实体框架4:如何在生成的查询中强制执行WHERE子句顺序

Car*_*lis 4 c# sql-server linq-to-entities entity-framework

假设下表MyObjects:

Id (PK, int)
DecimalField (decimal)
TextField (nvarchar)
Run Code Online (Sandbox Code Playgroud)

我已经添加了一个额外的索引DecimalField.

考虑以下LINQ to Entities查询来检索对象:

db.MyObjects.FirstOrDefault(r => r.DecimalField == localValue1 && r.TextField == localValue2)
Run Code Online (Sandbox Code Playgroud)

由于索引,重要的是EF生成的查询使WHERE子句中的属性顺序保持相同(即DecimalField第一和TextField第二),否则将发生表扫描并且索引无用.如何强制EF在WHERE子句中保持某个顺序?ad hoc和编译查询之间有区别吗?

Kri*_*erA 6

不,where子句谓词的顺序无关紧要.SQL Server将使用适当的索引(如果有),即使您的where子句以不同于索引中显示的顺序指定列.