【问题标题】:CRM SDK - Is Linq slower than QueryExpression?CRM SDK - Linq 比 QueryExpression 慢吗?
【发布时间】:2014-04-17 16:07:21
【问题描述】:

我已经搜索了一个 lor 以找出这个问题,但仍然看不到一个好的回应。我使用 Linq 和 QueryExpression 对相同的查询进行计时,通常后者的输出速度要快得多。但是由于多个帖子中暴露的许多原因(包括事实比 QueryExpression 语法可怕),我更喜欢使用 Linq。

谁能解释一下为什么 QE 中的查询比 Linq 快?这会是环境问题(VS 2012、CRM 2011 和 2013、Windows 7 等,即相当标准)还是 QE 在设计/架构上比 Linq 快?

【问题讨论】:

    标签: linq dynamics-crm crm microsoft-dynamics


    【解决方案1】:

    由于查询不知道以后需要哪些字段,所以当select子句中只指定实体时,所有列都从实体返回。为了仅指定您将使用的字段,您必须在 select 子句中返回一个新对象,指定您要使用的字段。

    所以不要这样:

    var accounts = from acct in xrm.AccountSet
                   where acct.Name.StartsWith("Test")
                   select acct;
    

    使用这个:

    var accounts = from acct in xrm.AccountSet
                   where acct.Name.StartsWith("Test")
                   select new Account()
                   {
                       AccountId = acct.AccountId,
                       Name = acct.Name
                   };
    

    查看这篇文章的更多详细信息。

    To Linq or not to Linq

    【讨论】:

    • 感谢您的回复。但是我的疑问是关于 linq Query 与 QueryExpression 的执行时间。假设在这两种情况下我都返回所有字段(或者就此而言,在这两种情况下我只返回 1 个字段)。哪个查询应该更快?
    • 达里尔回答的第一部分解决了这个问题(给定等效的“选择”语句,这个问题更快)
    【解决方案2】:

    LINQ to CRM 提供程序必须在将请求发送到服务器之前将 LINQ 表达式转换为 Query Expression,因此 LINQ 查询总是会变慢,因为它必须首先生成 QueryExpression

    正如 Scott 在他的回答中指出的那样,在使用 LINQ 时也很容易没有意识到您正在查询一个实体的所有字段。由于生成的QueryExpression 的优化程度低于显式定义的优化,这将使其更慢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 2012-07-03
      • 2011-09-05
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      相关资源
      最近更新 更多