2011-09-26 48 views
0

我讀過某處「Linq評估查詢一次的方法」。究竟是什麼意思?也許,運營商被稱爲指定的順序 - 例如,在下面的代碼Select被稱爲Where前:什麼是「Linq一次評估查詢一種方法」的含義?

var results = someCollection.Select(...).Where(...); 

而在這裏Where被稱爲Select前:

var results = someCollection.Where(...).Select(...); 

請問這是什麼意思由「評估一次查詢一種方法」?

謝謝

+2

我想或許這篇評論是參照LINQ創建可嵌套方法調用的內存查詢中的Enumerable包裝與作爲表達式樹(對於IQueryProvider)執行的查詢之間的差異而構建的.... – Jeff

回答

2

沒有引文,它告訴我們什麼地方你看,我們只能在猜測意義。

我會解釋這個短語的意思是說,多個LINQ方法充當一個管道,即每一塊數據都在下一個數據流之前流過。

例如:

var numbers = new[] { 1, 2, 3 }; 

var results = numbers.Select(number => number * 2).Where(number => number > 3); 

充滿渴望的評估,執行應該是這樣的:

1, 2, 3 -> Select -> 2, 4, 6 -> Where -> 4, 6 

然而,隨着遞延評價,每個結果在需要時進行計算。這接通的方法的執行的「垂直」,而不是「水平」,執行用於每個數據項的所有方法,然後與下一個數據項再次開始:

1 -> Select -> 2 -> Where -> nothing 
2 -> Select -> 4 -> Where -> 4 
3 -> Select -> 6 -> Where -> 6 

當然,這是不適合的方法真正其在整套設備上運行,如DistinctOrderBy。所有數據項必須「彙集」到那裏直到執行可以繼續。然而,絕大多數情況下,當LINQ方法被要求提供另一個項目時,它們只會從源頭請求項目。

+0

謝謝你非常 – user702769

相關問題