强制LINQ to SQL或ENTITIES发出BETWEEN运算符

时间:2014-11-07 20:06:41

标签: sql linq entity-framework

在处理SQL Server和作为聚簇索引的日期时,为了正确访问索引,查询必须采用以下形式:

select fields
  from dbo.MyTable
 where myDate between @begDate and @endDate

between运算符是触发聚簇搜索的原因。如何告诉LINQ发出between运算符而不是> = this和< = that?

1 个答案:

答案 0 :(得分:0)

不幸的是,Linq没有运营商或同等运营商。实现这一目标的最佳(也可能)唯一方法是使用sql。

如果您希望编写复杂或优化的查询,最好使用sql而不是linq。其主要优点是:

  • 代码可以在管理工作室中进行全面测试,而无需使用第二语言进行翻译和调试
  • 出于传统目的,通常最好将sql用于数据库访问代码,因为这在数据库专家中更为广为人知。 LINQ是DBA的诅咒,他们必须管理/支持其他人编写的代码。

我同意Gerge Mauer建议使用存储过程或ADO。

这可能仍然会让您遇到参数嗅探问题,在这种情况下,您可能必须使用查询提示(如OPTIMIZE FOR / RECOMPILE)或局部变量来解决此问题,如本文所示:

http://blogs.msdn.com/b/turgays/archive/2013/09/10/parameter-sniffing-problem-and-workarounds.aspx