標準クエリ演算子の概要 (Visual Basic)

"標準クエリ演算子" は、LINQ パターンを形成するメソッドです。 これらのメソッドの大部分はシーケンスに対して機能します。ここでシーケンスとは、IEnumerable<T> インターフェイスまたは IQueryable<T> インターフェイスを実装している型のオブジェクトのことです。 標準クエリ演算子には、フィルター処理、プロジェクション、集計、並べ替えなどのクエリ機能が用意されています。

LINQ 標準クエリ演算子には 2 つのセットがあります。1 つは IEnumerable<T> 型のオブジェクトを操作する演算子、もう 1 つは IQueryable<T> 型のオブジェクトを操作する演算子です。 各セットを構成するメソッドは、それぞれ、Enumerable および Queryable クラスの静的メンバーです。 そのメソッドの操作対象である型の "拡張メソッド" として定義されています。 つまり、静的メソッド構文またはインスタンス メソッド構文のいずれかを使用して呼び出すことができます。

さらに、いくつかの標準クエリ演算子メソッドが、IEnumerable<T> または IQueryable<T> を基にする型以外の型を操作します。 Enumerable 型は、このような 2 つのメソッドを定義し、その両方が IEnumerable 型のオブジェクトを操作します。 これらのメソッド Cast<TResult>(IEnumerable)OfType<TResult>(IEnumerable) を使用して、LINQ パターンでクエリされるパラメーター化されていないまたは非ジェネリック型のコレクションを有効にすることができます。 これを行うには、厳密に型指定されたオブジェクトのコレクションを作成します。 Queryable クラスは、型 Queryable のオブジェクトを操作する 2 つの類似したメソッド Cast<TResult>(IQueryable)OfType<TResult>(IQueryable) を定義します。

標準クエリ演算子の実行のタイミングは、シングルトン値を返すか、値のシーケンスを返すかで異なります。 これらのシングルトン値を返すメソッド (たとえば、AverageSum) は、すぐに実行されます。 シーケンスを返すメソッドは、クエリの実行を遅延させ、列挙可能なオブジェクトを返します。

メモリ内コレクションを操作するメソッド、つまり IEnumerable<T> を拡張するメソッドの場合、返される列挙可能なオブジェクトは、メソッドに渡された引数をキャプチャします。 オブジェクトが列挙されると、クエリ演算子のロジックが使用され、クエリ結果が返されます。

一方、IQueryable<T> を拡張するメソッドはクエリ動作を実装しませんが、実行されるクエリを表す式ツリーを作成します。 クエリの処理は、ソース IQueryable<T> オブジェクトによって処理されます。

クエリ メソッドの呼び出しは 1 回のクエリにまとめてチェーン化できるため、クエリが複雑になることがあります。

次のコード例は、標準クエリ演算子を使用してシーケンスに関する情報を取得する方法を示しています。

Dim sentence = "the quick brown fox jumps over the lazy dog"
' Split the string into individual words to create a collection.
Dim words = sentence.Split(" "c)

Dim query = From word In words
            Group word.ToUpper() By word.Length Into gr = Group
            Order By Length _
            Select Length, GroupedWords = gr

Dim output As New System.Text.StringBuilder
For Each obj In query
    output.AppendLine(String.Format("Words of length {0}:", obj.Length))
    For Each word As String In obj.GroupedWords
        output.AppendLine(word)
    Next
Next

'Display the output
MsgBox(output.ToString())

' This code example produces the following output:
'
' Words of length 3:
' THE
' FOX
' THE
' DOG
' Words of length 4:
' OVER
' LAZY
' Words of length 5:
' QUICK
' BROWN
' JUMPS

クエリ式の構文

頻繁に使用される標準クエリ演算子の中には、C# および Visual Basic 言語専用のキーワード構文が使用されているものがあります。こうした構文では、標準クエリ演算子を、"クエリ" の一部として呼び出すことができます。 専用キーワードおよびそれに対応する構文が使用されている標準クエリ演算子の詳細については、「標準クエリ演算子のクエリ式構文 (Visual Basic)」を参照してください。

標準クエリ演算子の拡張

標準クエリ演算子のセットを拡張するには、対象のドメインまたはテクノロジに適したドメイン固有のメソッドを作成します。 また、標準クエリ演算子を、リモート評価、クエリ変換、最適化などの追加サービスが用意されている独自の実装で置き換えることもできます。 例については、「AsEnumerable」を参照してください。

次のリンクをクリックすると、さまざまな標準クエリ演算子に関する追加情報を機能別に確認することができます。

関連項目