From 句 (Visual Basic)
更新 : 2007 年 11 月
クエリに 1 つ以上の範囲変数とコレクションを指定します。
From element [ As type ] In collection [ _ ]
[, element2 [ As type2 ] In collection2 [, ... ] ]
指定項目
element
必ず指定します。コレクションの要素を反復処理するために使用する範囲変数。範囲変数を使用して、クエリで collection を反復処理するときに、collection の各メンバを参照します。列挙型である必要があります。type
省略可能です。element の型。type の指定がない場合、element の型は collection から推論されます。collection
必ず指定します。クエリの対象となるコレクションを示します。列挙型にする必要があります。
解説
From 句を使用して、クエリのソース データと、ソース コレクションの要素を参照するために使用する変数を識別します。これらの変数を範囲変数と呼びます。Aggregate 句を使用して集計結果だけを返すクエリを指定する場合を除いて、From 句は、クエリでは必須です。詳細については、「Aggregate 句 (Visual Basic)」を参照してください。
1 つのクエリに複数の From 句を指定して、結合する複数のコレクションを指定できます。複数のコレクションを指定した場合、各コレクションは別々に反復処理されます。コレクションに関連性がある場合は、結合することもできます。コレクションの結合は、Select 句を使用して暗黙的に実行するか、Join 句または Group Join 句を使用して明示的に実行できます。または、1 つの From 句の中に、関連性のある範囲変数とコレクションをコンマで区切ることで、複数の範囲変数とコレクションを指定できます。次のコード例では、From 句の両方の構文のオプションを示しています。
' Multiple From clauses in a query.
Dim result = From var1 In collection1, var2 In collection2
' Equivalent syntax with a single From clause.
Dim result2 = From var1 In collection1 _
From var2 In collection2
From 句は、クエリのスコープを定義します。これは For ループのスコープに似ています。したがって、クエリのスコープ内の各 element 範囲変数は一意の名前を持っている必要があります。1 つのクエリに複数の From 句を指定できるので、後続の From 句で From 句の範囲変数を参照したり、直前の From 句の範囲変数を参照したりできます。たとえば、次の例は、入れ子になった From 句を示しています。ここでは、2 番目の句のコレクションは、最初の句の範囲変数のプロパティに基づいています。
Dim allOrders = From cust In GetCustomerList() _
From ord In cust.Orders _
Select ord
各 From 句の直後に別のクエリ句を任意に組み合わせて追加することで、クエリを絞り込むことができます。クエリは、次の方法で絞り込むことができます。
複数のコレクションを、From 句と Select 句を使用して暗黙的に結合する。または、Join 句または Group Join 句を使用して明示的に結合する。
Where 句を使用して、クエリ結果をフィルタ処理する。
Order By 句を使用して、結果を並べ替える。
Group By 句を使用して、類似する結果をグループ化する。
Aggregate 句を使用して、クエリ結果全体を評価する集計関数を指定する。
Let 句を使用して、コレクションの代わりに式によって値が決定される反復変数を使用する。
Distinct 句を使用して、重複するクエリ結果を無視する。
Skip、Take、Skip While、および Take While の各句を使用して、返される結果の一部を指定する。
使用例
次のクエリ式では、From 句を使用して、customers コレクション内の各 Customer オブジェクト用の範囲変数 cust を宣言します。Where 句は、この範囲変数を使用して、出力を指定された地区の顧客に制限します。For Each ループにより、クエリ結果内の各顧客の会社名が表示されます。
Sub DisplayCustomersForRegion(ByVal customers As List(Of Customer), _
ByVal region As String)
Dim customersForRegion = From cust In customers _
Where cust.Region = region
For Each cust In customersForRegion
Console.WriteLine(cust.CompanyName)
Next
End Sub
参照
概念
参照
For Each...Next ステートメント (Visual Basic)
For...Next ステートメント (Visual Basic)