CRM SDK - Linq比QueryExpression慢吗?

时间:2014-04-17 16:07:22

标签: linq dynamics-crm crm microsoft-dynamics

我已经在一个人身边搜寻了这个,但仍然看不到好的回应。我使用Linq和QueryExpression定时查询相同的查询,通常后者出来的速度要快得多。但是由于在多个帖子中暴露的众多原因(包括比QueryExpression语法更糟糕的事实),我更喜欢使用Linq。

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

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