2014-04-17 66 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比明確定義的優化要少。