基本的なクエリ操作 (Visual Basic)Basic Query Operations (Visual Basic)

このトピックで説明を簡単に紹介統合言語クエリ (LINQ: Language-Integrated Query)Language-Integrated Query (LINQ)Visual Basic、およびいくつかのクエリを実行する操作の一般的な種類の式。This topic provides a brief introduction to 統合言語クエリ (LINQ: Language-Integrated Query)Language-Integrated Query (LINQ) expressions in Visual Basic, and to some of the typical kinds of operations that you perform in a query. 詳細については、次のトピックを参照してください。For more information, see the following topics:

Visual Basic における LINQ の概要Introduction to LINQ in Visual Basic

クエリQueries

チュートリアル: Visual Basic におけるクエリの作成Walkthrough: Writing Queries in Visual Basic

(From) データ ソースを指定します。Specifying the Data Source (From)

LINQLINQのクエリでは、まず、クエリを実行するデータ ソースを指定します。In a LINQLINQ query, the first step is to specify the data source that you want to query. そのため、Fromクエリ句は常に最初は。Therefore, the From clause in a query always comes first. クエリ演算子は、選択し、図形のソースの種類に基づく結果。Query operators select and shape the result based on the type of the source.

Dim query = From cust In customers
'           ...

From句は、データ ソースを指定customers、および範囲変数custします。The From clause specifies the data source, customers, and a range variable, cust. 範囲変数は、クエリ式では、実際の反復は発生しませんが、ループの反復変数のようなは。The range variable is like a loop iteration variable, except that in a query expression, no actual iteration occurs. クエリが実行されると、多くの場合を使用して、For Eachループ、連続する各要素への参照として範囲変数customersします。When the query is executed, often by using a For Each loop, the range variable serves as a reference to each successive element in customers. cust の型はコンパイラで推論できるため、明示的に指定する必要はありません。Because the compiler can infer the type of cust, you do not have to specify it explicitly. 明示的な型指定なしで記述されたクエリの例については、次を参照してください。クエリ操作 (Visual Basic) での型の関係します。For examples of queries written with and without explicit typing, see Type Relationships in Query Operations (Visual Basic).

使用する方法についての詳細、 From Visual basic での句を参照してください句からします。For more information about how to use the From clause in Visual Basic, see From Clause.

データのフィルター処理 (場所)Filtering Data (Where)

おそらく、最も一般的なクエリ操作では、ブール式の形式でフィルターを適用するは。Probably the most common query operation is applying a filter in the form of a Boolean expression. クエリは、式が true の要素のみを返します。The query then returns only those elements for which the expression is true. AWhere句を使用して、フィルター処理を実行します。A Where clause is used to perform the filtering. フィルターは、結果のシーケンスに含めるデータ ソース内のどの要素を指定します。The filter specifies which elements in the data source to include in the resulting sequence. 次の例では、住所がロンドンを持つお客様のみが含まれます。In the following example, only those customers who have an address in London are included.

Dim londonCusts = From cust In customers
                  Where cust.City = "London"
'                 ...

などの論理演算子を使用することができますAndOrのフィルター式を結合する、Where句。You can use logical operators such as And and Or to combine filter expressions in a Where clause. たとえば、ロンドンし、名前を持つ、デボン顧客のみを返すには、次のコードを使用します。For example, to return only those customers who are from London and whose name is Devon, use the following code:

Where cust.City = "London" And cust.Name = "Devon"   

ロンドンまたはパリにある顧客を返すには、次のコードを使用します。To return customers from London or Paris, use the following code:

Where cust.City = "London" Or cust.City = "Paris"   

使用する方法についての詳細、 Where Visual basic での句を参照してくださいWhere 句します。For more information about how to use the Where clause in Visual Basic, see Where Clause.

データ (Order By) の並べ替えOrdering Data (Order By)

多くの場合は、特定の順序に返されるデータを並べ替えると便利です。It often is convenient to sort returned data into a particular order. Order By句には、指定されたフィールドで並べ替えるに返されたシーケンスで要素が発生します。The Order By clause will cause the elements in the returned sequence to be sorted on a specified field or fields. たとえば、次のクエリがに基づいて結果を並べ替えます、Nameプロパティ。For example, the following query sorts the results based on the Name property. Name文字列では、a ~ Z、返されるデータは、アルファベット順に並べ替えられます。Because Name is a string, the returned data will be sorted alphabetically, from A to Z.

Dim londonCusts1 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
'                   ...

結果を逆の順序 (Z から A) で並び替えるには、Order By...Descending 句を使用します。To order the results in reverse order, from Z to A, use the Order By...Descending clause. 既定値はAscendingがいずれもAscendingDescendingを指定します。The default is Ascending when neither Ascending nor Descending is specified.

使用する方法についての詳細、 Order By Visual basic での句を参照してくださいOrder By 句します。For more information about how to use the Order By clause in Visual Basic, see Order By Clause.

データ (選択) を選択します。Selecting Data (Select)

Select句は、フォームと返される要素の内容を指定します。The Select clause specifies the form and content of returned elements. 完全な結果はで構成されているかどうかを指定するたとえば、Customerオブジェクト、1 つにすぎませんCustomer計算に基づいて、プロパティ、プロパティのサブセット、さまざまなデータ ソース、または新しい結果の種類からのプロパティの組み合わせ。For example, you can specify whether your results will consist of complete Customer objects, just one Customer property, a subset of properties, a combination of properties from various data sources, or some new result type based on a computation. Select 句でソース要素のコピー以外のものを生成する場合、その操作は投影と呼ばれます。When the Select clause produces something other than a copy of the source element, the operation is called a projection.

完全なから成るコレクションを取得するCustomerオブジェクト、範囲変数自体を選択します。To retrieve a collection that consists of complete Customer objects, select the range variable itself:

Dim londonCusts2 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust

場合、Customerインスタンスは、ラージ オブジェクトを持つ多くのフィールドと名前を取得することだけですを選択できますcust.Name次の例のようにします。If a Customer instance is a large object that has many fields, and all that you want to retrieve is the name, you can select cust.Name, as shown in the following example. ローカル型推論のコレクションから結果の型が変更されるCustomerオブジェクトを文字列のコレクション。Local type inference recognizes that this changes the result type from a collection of Customer objects to a collection of strings.

Dim londonCusts3 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust.Name

データ ソースから複数のフィールドを選択するには、2 つの選択肢があります。To select multiple fields from the data source, you have two choices:

  • Select句では、結果に含めるフィールドを指定します。In the Select clause, specify the fields you want to include in the result. コンパイラは、それらのフィールドとしてそのプロパティを含む匿名型を定義します。The compiler will define an anonymous type that has those fields as its properties. 詳細については、「匿名型」を参照してください。For more information, see Anonymous Types.

    次の例で返される要素は、匿名型のインスタンスであるため、参照できません型に名前で別の場所、コード内。Because the returned elements in the following example are instances of an anonymous type, you cannot refer to the type by name elsewhere in your code. コンパイラの指定、型名には、通常の Visual Basic コードでは無効な文字が含まれています。The compiler-designated name for the type contains characters that are not valid in normal Visual Basic code. 次の例では、クエリでは、によって返されるコレクション内の要素でlondonCusts4匿名型のインスタンスであります。In the following example, the elements in the collection that is returned by the query in londonCusts4 are instances of an anonymous type

    Dim londonCusts4 = From cust In customers
                       Where cust.City = "London"
                       Order By cust.Name Ascending
                       Select Name = cust.Name, Phone = cust.Phone
    
    For Each londonCust In londonCusts4
        Console.WriteLine(londonCust.Name & " " & londonCust.Phone)
    Next
    

    - または --or-

  • 結果に含まれるを作成し、型のインスタンスを初期化する特定のフィールドを含む名前付きの型を定義、Select句。Define a named type that contains the particular fields that you want to include in the result, and create and initialize instances of the type in the Select clause. これらは、返される、コレクションの外部の個別の結果を使用する必要がある場合にのみ、またはメソッドの呼び出しでパラメーターとして渡すことがある場合は、このオプションを使用します。Use this option only if you have to use individual results outside the collection in which they are returned, or if you have to pass them as parameters in method calls. londonCusts5次の例では、IEnumerable (Of NamePhone)。The type of londonCusts5 in the following example is IEnumerable(Of NamePhone).

    Public Class NamePhone
        Public Name As String
        Public Phone As String
        ' Additional class elements
    End Class
    
    Dim londonCusts5 = From cust In customers
                       Where cust.City = "London"
                       Order By cust.Name Ascending
                       Select New NamePhone With {.Name = cust.Name,
                                                  .Phone = cust.Phone}
    

使用する方法についての詳細、 Select Visual basic での句を参照してくださいSelect 句します。For more information about how to use the Select clause in Visual Basic, see Select Clause.

結合のデータ (結合やグループ結合)Joining Data (Join and Group Join)

複数のデータ ソースを組み合わせることができます、Fromいくつかの方法で句。You can combine more than one data source in the From clause in several ways. たとえば、次のコードでは、2 つのデータ ソースを使用して、暗黙的に結果にこれらの両方からのプロパティを結合します。For example, the following code uses two data sources and implicitly combines properties from both of them in the result. クエリでは、母音で始まる最後名前受講者を選択します。The query selects students whose last names start with a vowel.

Dim vowels() As String = {"A", "E", "I", "O", "U"}
Dim vowelNames = From student In students, vowel In vowels
                 Where student.Last.IndexOf(vowel) = 0
                 Select Name = student.First & " " &
                 student.Last, Initial = vowel
                 Order By Initial

For Each vName In vowelNames
    Console.WriteLine(vName.Initial & ":  " & vName.Name)
Next

注意

作成した受講者の一覧で、このコードを実行することができます方法。項目の一覧を作成です。You can run this code with the list of students created in How to: Create a List of Items.

Joinキーワードは、 INNER JOIN sql です。The Join keyword is equivalent to an INNER JOIN in SQL. これは、2 つのコレクション内の要素間の一致するキー値に基づいて 2 つのコレクションを結合します。It combines two collections based on matching key values between elements in the two collections. クエリでは、キーの値が一致するコレクションの要素のすべてまたは一部を返します。The query returns all or part of the collection elements that have matching key values. たとえば、次のコードでは、前の暗黙の結合のアクションが重複しています。For example, the following code duplicates the action of the previous implicit join.

Dim vowelNames2 = From student In students
                  Join vowel In vowels
                  On student.Last(0) Equals vowel
                  Select Name = student.First & " " &
                  student.Last, Initial = vowel
                  Order By Initial

Group Join 同じようにコレクションを 1 つの階層コレクションを組み合わせて、 LEFT JOIN sql です。Group Join combines collections into a single hierarchical collection, just like a LEFT JOIN in SQL. 詳細については、次を参照してください。 Join 句Group Join 句します。For more information, see Join Clause and Group Join Clause.

データのグループ化 (Group By)Grouping Data (Group By)

追加することができます、Group By要素の 1 つまたは複数のフィールドに従ってのクエリ結果内の要素をグループ化する句。You can add a Group By clause to group the elements in a query result according to one or more fields of the elements. たとえば、次のコードでは、クラス年ごと学生をグループ化します。For example, the following code groups students by class year.

Dim studentsByYear = From student In students
                     Select student
                     Group By year = student.Year
                     Into Classes = Group

For Each yearGroup In studentsByYear
    Console.WriteLine(vbCrLf & "Year: " & yearGroup.year)
    For Each student In yearGroup.Classes
        Console.WriteLine("   " & student.Last & ", " & student.First)
    Next
Next

作成した受講者のリストを使用してこのコードを実行するかどうかは方法。リストの項目を作成からの出力、For Eachステートメントは。If you run this code using the list of students created in How to: Create a List of Items, the output from the For Each statement is:

年。JuniorYear: Junior

Tucker です、MichaelTucker, Michael

Garcia、HugoGarcia, Hugo

Garcia、DebraGarcia, Debra

Lance、tucker です。Tucker, Lance

年。シニアYear: Senior

Omelchenko、SvetlanaOmelchenko, Svetlana

田山、MichikoOsada, Michiko

Fakhouri、FadiFakhouri, Fadi

Feng、ある HanyingFeng, Hanying

Terry Adams は、Adams, Terry

年。今Year: Freshman

Mortensen、SvenMortensen, Sven

Garcia、CesarGarcia, Cesar

次のコードに示すように、バリエーションの 1 つは、並べ替え、クラスの年を姓で各年度、受講者を並べ替えます。The variation shown in the following code orders the class years, and then orders the students within each year by last name.

Dim studentsByYear2 = From student In students
                      Select student
                      Order By student.Year, student.Last
                      Group By year = student.Year
                      Into Classes = Group

詳細についてはGroup Byを参照してくださいBy 句のグループします。For more information about Group By, see Group By Clause.

関連項目See also