C#3.0新增功能09 LINQ 標準查詢運算符 03 按執行方式的分類

標準查詢運算符方法的 LINQ to Objects 實現主要經過兩種方法之一執行:當即執行和延遲執行。使用延遲執行的查詢運算符能夠進一步分爲兩種類別:流式處理和非流式處理。 若是你瞭解不一樣查詢運算符的執行方式,則有助於理解從給定查詢中得到的結果。 若是數據源是不斷變化的,或者若是你要在另外一個查詢的基礎上構建查詢,這種幫助尤爲明顯。 本篇根據標準查詢運算符的執行方式對其進行分類。html

執行方式

即時

當即執行指的是在代碼中聲明查詢的位置讀取數據源並執行運算。 返回單個不可枚舉的結果的全部標準查詢運算符都當即執行。api

推遲

延遲執行指的是不在代碼中聲明查詢的位置執行運算。 僅當對查詢變量進行枚舉時才執行運算,例如經過使用 foreach 語句執行。 這意味着,查詢的執行結果取決於執行查詢而非定義查詢時的數據源內容。 若是屢次枚舉查詢變量,則每次結果可能都不一樣。 幾乎全部返回類型爲 IEnumerable<T> 或 IOrderedEnumerable<TElement> 的標準查詢運算符皆以延遲方式執行。數組

使用延遲執行的查詢運算符能夠另外分類爲流式處理和非流式處理。數據結構

流式處理

流式處理運算符不須要在生成元素前讀取全部源數據。 在執行時,流式處理運算符一邊讀取每一個源元素,一邊對該源元素執行運算,並在可行時生成元素。 流式處理運算符將持續讀取源元素直到能夠生成結果元素。 這意味着可能要讀取多個源元素才能生成一個結果元素。spa

非流式處理

非流式處理運算符必須先讀取全部源數據,而後才能生成結果元素。 排序或分組等運算均屬於此類別。 在執行時,非流式處理查詢運算符將讀取全部源數據,將其放入數據結構,執行運算,而後生成結果元素。code

分類表
下表按照執行方法對每一個標準查詢運算符方法進行了分類。
若是某個運算符被標入兩個列中,則表示在運算中涉及兩個輸入序列,每一個序列的計算方式不一樣。 在此類狀況下,參數列表中的第一個序列始終以延遲流式處理方式來執行計算。
標準查詢運算符 返回類型 當即執行 延遲的流式處理執行 延遲非流式處理執行
Aggregate TSource X    
All Boolean X    
Any Boolean X    
AsEnumerable IEnumerable<T>   X  
Average 單個數值 X    
Cast IEnumerable<T>   X  
Concat IEnumerable<T>   X  
Contains Boolean X    
Count Int32 X    
DefaultIfEmpty IEnumerable<T>   X  
Distinct IEnumerable<T>   X  
ElementAt TSource X    
ElementAtOrDefault TSource X    
Empty IEnumerable<T> X    
Except IEnumerable<T>   X X
First TSource X    
FirstOrDefault TSource X    
GroupBy IEnumerable<T>     X
GroupJoin IEnumerable<T>   X X
Intersect IEnumerable<T>   X X
Join IEnumerable<T>   X X
Last TSource X    
LastOrDefault TSource X    
LongCount Int64 X    
Max 單個數值、TSource 或 TResult X    
Min 單個數值、TSource 或 TResult X    
OfType IEnumerable<T>   X  
OrderBy IOrderedEnumerable<TElement>     X
OrderByDescending IOrderedEnumerable<TElement>     X
Range IEnumerable<T>   X  
Repeat IEnumerable<T>   X  
Reverse IEnumerable<T>     X
Select IEnumerable<T>   X  
SelectMany IEnumerable<T>   X  
SequenceEqual Boolean X    
Single TSource X    
SingleOrDefault TSource X    
Skip IEnumerable<T>   X  
SkipWhile IEnumerable<T>   X  
Sum 單個數值 X    
Take IEnumerable<T>   X  
TakeWhile IEnumerable<T>   X  
ThenBy IOrderedEnumerable<TElement>     X
ThenByDescending IOrderedEnumerable<TElement>     X
ToArray TSource 數組 X    
ToDictionary Dictionary<TKey,TValue> X    
ToList IList<T> X    
ToLookup ILookup<TKey,TElement> X    
Union IEnumerable<T>   X  
Where IEnumerable<T>   X

 
相關文章
相關標籤/搜索