Share via


実行方法による標準クエリ演算子の分類 (Visual Basic)

標準クエリ演算子メソッドの LINQ to Objects 実装は、主に 2 とおりの方法 (即時と遅延) で実行されます。 遅延実行を使用するクエリ演算子は、さらに 2 つのカテゴリ (ストリーミングと非ストリーミング) に分けることができます。 それぞれのクエリ演算子がどのように動作するかを把握しておくと、指定したクエリの結果を理解するうえで役立ちます。 これは、データ ソースが変更される場合や、別のクエリに基づいてさらにクエリを作成する場合に特に便利です。 このトピックでは、標準クエリ演算子を、その実行方法に基づいて分類します。

実行方法

イミディエイト

即時実行とは、クエリが宣言されたコード内の位置で、データ ソースが読み取られ、演算が実行されることを意味します。 列挙できない単一の結果を返す標準クエリ演算子は、すべて即時に実行されます。

遅延

遅延実行とは、クエリが宣言されたコード内の位置では演算が実行されないことを意味します。 演算は、For Each ステートメントを使用するなどの方法により、クエリ変数が列挙されたときにのみ実行されます。 つまり、クエリの実行結果は、クエリの定義時ではなくクエリの実行時のデータ ソースの内容に依存します。 クエリ変数が複数回列挙される場合は、そのたびに結果が変わる可能性があります。 戻り値の型が IEnumerable<T> または IOrderedEnumerable<TElement> の標準クエリ演算子は、ほとんどが遅延実行されます。

遅延実行を使用するクエリ演算子は、さらにストリーミングか非ストリーミングに分類できます。

ストリーム

ストリーミング演算子では、要素を生成する前にすべてのソース データを読み取る必要はありません。 実行時に、ストリーミング演算子は読み取ったソース要素ごとに演算を実行し、必要に応じて要素を生成します。 ストリーミング演算子は、結果の要素を生成できるまでソース要素の読み取りを続行します。 つまり、結果の要素を 1 つ生成するために複数のソース要素が読み取られる場合があります。

非ストリーミング

非ストリーミング演算子では、結果の要素を生成する前にすべてのソース データを読み取る必要があります。 並べ替えやグループ化などの演算はこのカテゴリに分類されます。 実行時に、非ストリーミング クエリ演算子はすべてのソース データを読み取ってデータ構造に格納し、演算を実行して結果の要素を生成します。

分類表

次の表では、各標準クエリ演算子メソッドを、その実行方法に基づいて分類しています。

注意

2 つの列にマークが付けられている演算子では、2 つの入力シーケンスが演算に使用され、各シーケンスの評価は異なります。 この場合、遅延実行のストリーミングで評価されるのは、常にパラメーター リストの最初のシーケンスになります。

標準クエリ演算子 戻り値の型 即時実行 遅延実行 (ストリーミング) 遅延実行 (非ストリーミング)
Aggregate TSource x
All Boolean X
Any Boolean X
AsEnumerable IEnumerable<T> X
Average 1 つの数値 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 1 つの数値、TSource、または TResult x
Min 1 つの数値、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 1 つの数値 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

関連項目