依執行方式將標準查詢運算子分類 (Visual Basic)

會使用兩種主要方式之一執行標準查詢運算子方法的 LINQ to Objects 實作:立即或延後。 使用延後執行的查詢運算子可以另外細分成兩個分類︰資料流和非資料流。 如果您知道如何執行不同的查詢運算子,則可以協助您了解透過給定查詢所取得的結果。 如果資料來源變更,或您所建置的查詢是根據另一個查詢,則這特別有用。 本主題會根據執行方式來分類標準查詢運算子。

執行方式

立即

立即執行表示讀取資料來源,並且在程式碼中宣告查詢的位置執行作業。 會立即執行傳回單一非可列舉結果的所有標準查詢運算子。

已延遲

延後執行表示未在程式碼中宣告查詢的位置執行作業。 只有在列舉查詢變數時,才會執行這項作業,例如,透過使用 For Each 陳述式。 這表示執行查詢的結果取決於執行查詢時的資料來源內容,而不是定義查詢時的資料來源內容。 如果多次列舉查詢變數,則每次都可能會有不同的結果。 幾乎傳回型別為 IEnumerable<T>IOrderedEnumerable<TElement> 的所有標準查詢運算子都會以延遲方式執行。

使用延後執行的查詢運算子可以另外分類為資料流和非資料流。

串流

資料流運算子在產生項目之前不需要讀取所有來源資料。 執行時,資料流運算子會在讀取並產生項目時 (適用時) 於每個來源項目上執行其運算。 除非產生結果項目,否則資料流運算子會繼續讀取來源項目。 這表示可能會讀取多個來源項目,以產生一個結果項目。

非資料流

非資料流運算子在產生結果項目之前必須讀取所有來源資料。 排序或分組這類作業會歸到此分類。 執行時,非資料流查詢運算子會讀取所有來源資料、將其放入資料結構中、執行作業,並產生結果項目。

分類表

下表會根據執行方法來分類每個標準查詢運算子方法。

注意

如果在兩個資料行中標記運算子,則作業包含兩個輸入序列,而且會以不同的方式評估每個序列。 在這些情況下,它一律是參數清單中以延後資料流方式評估的第一個序列。

標準查詢運算子 傳回類型 立即執行 延後資料流執行 延後非資料流執行
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

另請參閱