代码之家  ›  专栏  ›  技术社区  ›  Andrew Florko

具有内部对象上下文实例的Linq to Entities表达式是否转换为SQL客户端服务器请求序列?

  •  1
  • Andrew Florko  · 技术社区  · 14 年前

    我的ADO.NET EF表达式如下:

    db.Table1.Select(
      x => new { ..., count = db.Table2.Count(y => y.ForeignKey.ID == x.ID) })
    

    我是否正确理解它已转换为若干SQL客户机-服务器请求,并可能进行重构以获得更好的性能?

    提前谢谢!

    2 回复  |  直到 14 年前
        1
  •  2
  •   RPM1984    14 年前

    是-表达式将(以最好的方式)转换为SQL查询。

    和任何T-SQL查询一样,可以重构EF(或L2SQL)查询表达式以提高性能。

    为什么不在后台运行SQL事件探查器来查看它正在执行什么,并首先尝试优化原始T-SQL——这将有助于优化表达式。

    或者如果你有 LinqPad ,只需优化T-SQL查询并让LinqPad为您编写查询。

    另外,我不太确定为什么为count()表达式指定了委托。

    您只需执行以下操作:

    var query= from c in db.Table1
                      select new { c.CustomerID, OrderCount = c.Table2s.Count() };
    
        2
  •  1
  •   Andrew Florko    14 年前

    答案是 -这 查询将转换为一个客户端到RDBMS请求 .

    RPM1984型 建议使用LinqPad。LinqPad显示,查询将被转换为非常简单的SQL表达式。分组方法将被转换为另一个SQL表达式,但仍将在一个请求中执行。