2014-04-17 53 views
5

我已经搜索周围的一个洛杉矶找出这一个,仍然看不到一个很好的回应。我使用Linq和QueryExpression对相同的查询进行计时,通常后者出现得更快。然而,由于在多个帖子中暴露出来的许多原因(包括QueryExpression语法非常糟糕的事实),我更喜欢使用Linq。CRM SDK - Linq比QueryExpression慢吗?

任何人都可以提供一个解释,为什么QE中的查询比Linq快?这是否会成为一个环境问题(VS 2012,CRM 2011和2013,Windows 7等,即相当标准)还是设计/架构比Qq更快?

回答

5

因为查询不知道稍后需要哪些字段,所以只有在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

+0

感谢您的回复。不过,我怀疑是关于linq Query与QueryExpression的执行时间。说在这两种情况下,我都会返回所有字段(或者就此而言,在这两种情况下,我只返回1个字段)。哪个查询应该更快? – aplon

5

的LINQ到CRM提供商必须将LINQ表达式转换为Query Expression它发送请求到服务器之前,所以LINQ查询总是要慢一些,因为它必须产生QueryExpression第一。

正如Scott在他的回答中指出的那样,在使用LINQ时也很容易意识到您正在查询实体的所有字段。这会让它更慢,因为生成的QueryExpression比明确定义的优化要少。