【问题标题】:Is there a way to force const inlining for generated query in LINQ to SQL?有没有办法强制在 LINQ to SQL 中生成查询的 const 内联?
【发布时间】:2014-12-03 17:29:02
【问题描述】:

LINQ to SQL 始终将值转换为输出中的查询参数。例如:

someTable.Where(n => n.Field == 5);

产生:

WHERE Field = @p0

这会导致某些查询优化方案出现问题。有没有办法强制在生成的 SQL 中内联值,使其变为:

WHERE Field = 5

? LINQ to Entities 会提供一种方式还是表现相同?

【问题讨论】:

  • 那些“场景”是什么?
  • @ErikEJ 在我的一个由 LINQ to SQL 生成的查询中,使用参数比使用内联值慢 10 倍。由于查询优化器的工作方式,这是有道理的。我不是在寻找优化我的查询本身,而是试图解决更广泛的“不必要的参数化”问题,这根本没有任何意义。
  • This question 提供了一些背景信息。
  • 我知道这是一个 2 年多的问题......但问了同样的问题。 stackoverflow.com/questions/44709877/…

标签: linq-to-sql linq-to-entities


【解决方案1】:

作为Diego Vega from Entity Framework team mentioned on Twitter:

常量实际上已经在 EF 中永远翻译为内联常量。

所以看来 EF 是要走的路,只有一个问题:

我们认为 EF7 应该进行更多参数化,因此我们需要了解何时对您不利

在这种情况下,至少 EF6 比 LINQ to SQL 好得多,因此我们可以改用 EF。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2010-09-19
    相关资源
    最近更新 更多