LINQ クエリ (クエリ式とも呼ばれます) は、データ ソースを識別するクエリ句と、クエリの反復変数の組み合わせで構成されます。クエリ式には、並べ替え、フィルタ処理、グループ化、および結合を実行する命令や、ソース データに適用する演算も指定できます。クエリ式の構文は SQL の構文に似ているので、ほとんどの構文は、改めて覚える必要はありません。
クエリ式は、From 句で始まります。この句は、クエリのソース データと、ソース データの各要素を個別に参照するために使用される変数を識別します。これらの変数は、範囲変数または反復変数と呼ばれます。From 句は、Aggregate クエリ以外のクエリでは必須です。このクエリでは、From 句は省略できます。From 句または Aggregate 句でクエリのスコープとソースを識別した後、クエリを絞り込むためのクエリ句を自由に組み合わせて記述できます。クエリ句の詳細については、このトピックの「Visual Basic LINQ クエリ演算子」を参照してください。たとえば、次のクエリでは、顧客データのソース コレクションを customers 変数として識別し、cust という名前の反復変数を識別します。
Dim queryResults = From cust In customers _
Select cust.CompanyName
この例はそのままでも有効なクエリですが、結果を絞り込むクエリ句を追加すると、はるかに強力なクエリになります。たとえば、Where 句を追加して、結果を 1 つ以上の値でフィルタ処理できます。クエリ式は、1 行のコードです。追加のクエリ句は、クエリの末尾に単純に追加できます。クエリを読みやすくするために、行連結文字のアンダースコア (_) を使用して、複数のテキスト行に分割できます。次のコード例は、Where 句を含むクエリの例を示しています。
Dim queryResults = From cust In customers _
Where cust.Country = "USA"
別の強力なクエリ句として、Select 句があります。この句を使用すると、データ ソースから選択したフィールドだけを返すことができます。LINQ クエリは、厳密に型指定されたオブジェクトの列挙可能なコレクションを返します。クエリは、匿名型または名前付きの型のコレクションを返すことができます。Select 句を使用して、データ ソースから単一のフィールドを返すことができます。これを行った場合、返されるコレクションの型は、その単一のフィールドの型になります。Select 句を使用して、データ ソースから複数のフィールドを返すこともできます。これを行った場合、返されるコレクションの型は、新しい匿名型になります。クエリで返されたフィールドを、指定した名前付きの型のフィールドと一致させることもできます。次のコード例は、データ ソースから選択されたフィールドのデータが設定されたメンバのコレクションで、匿名型のコレクションを返すクエリ式を示します。
Dim queryResults = From cust In customers _
Where cust.Country = "USA" _
Select cust.CompanyName, cust.Country
LINQ クエリを使用して、複数のデータ ソースを結合し、単一の結果を返すこともできます。これは、1 つまたは複数の From 句を使用するか、Join クエリ句または Group Join クエリ句を使用して実行できます。次のコード例は、顧客データと注文データを結合し、顧客データと注文データが格納された匿名型のコレクションを返すクエリ式を示します。
Dim queryResults = From cust In customers, ord In orders _
Where cust.CustomerID = ord.CustomerID _
Select cust, ord
Group Join 句を使用して、顧客オブジェクトのコレクションを格納する階層的なクエリ結果を作成できます。各顧客オブジェクトには、その顧客のすべての注文のコレクションを含むプロパティがあります。次のコード例は、顧客データと注文データを階層的な結果として結合し、匿名型のコレクションを返すクエリ式を示します。このクエリは、顧客の注文データのコレクションを格納する CustomerOrders プロパティを含む型を返します。その顧客のすべての注文の合計を格納する OrderTotal プロパティも含まれます (このクエリは、LEFT OUTER JOIN と同等です)。
Dim queryResults = From cust In customers _
Group Join ord In orders On _
cust.CustomerID Equals ord.CustomerID _
Into CustomerOrders = Group, _
OrderTotal = Sum(ord.Total) _
Select cust.CompanyName, cust.CustomerID, _
CustomerOrders, OrderTotal
上記以外にも、強力なクエリ式を作成するために使用できる、さまざまな LINQ クエリ演算子があります。このトピックの次のセクションで、クエリ式で使用できるさまざまなクエリ句について説明します。Visual Basic クエリ句の詳細については、「クエリ (Visual Basic)」を参照してください。