我已经在一个人身边搜寻了这个,但仍然看不到好的回应。我使用Linq和QueryExpression定时查询相同的查询,通常后者出来的速度要快得多。但是由于在多个帖子中暴露的众多原因(包括比QueryExpression语法更糟糕的事实),我更喜欢使用Linq。
任何人都可以解释为什么QE中的查询比Linq更快?这会是一个环境问题(VS 2012,CRM 2011和2013,Windows 7等,即非常标准)还是设计/建设的QE比Linq更快?
答案 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
};
查看此帖更多详情。
答案 1 :(得分:4)
LINQ to CRM Provider必须在将请求发送到服务器之前将LINQ表达式转换为Query Expression
,因此LINQ查询总是会变慢,因为它必须生成{{1}首先。
正如Scott在他的回答中指出的那样,在使用LINQ时,很容易意识到你正在查询实体的所有字段。这会使它更慢,因为生成的QueryExpression
不如明确定义的QueryExpression
优化。