Select 句 (Visual Basic)

クエリの結果を定義します。

構文

Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]  

指定項目

var1
任意。 列式の結果を参照するために使用できる別名。

fieldName1
必須です。 クエリ結果に返されるフィールドの名前。

Remarks

Select 句を使用して、クエリから返される結果を定義できます。 これにより、クエリによって作成された新しい匿名型のメンバーを定義することも、クエリによって返される名前付きの型のメンバーを対象にすることもできます。 Select 句は、クエリには必要ありません。 Select 句が指定されていない場合、クエリは、現在のスコープで識別される範囲変数のすべてのメンバーに基づいて型を返します。 詳細については、「匿名型」を参照してください。 クエリで名前付きの型を作成すると、型 IEnumerable<T> の結果が返されます。ここで T は作成された型です。

Select 句は、現在のスコープ内の任意の変数を参照できます。 これには、From 句 (または From 句) で識別される範囲変数が含まれます。 また、AggregateLetGroup ByGroup Join の各句による別名で作成された新しい変数、またはクエリ式の前の Select 句からの変数も含まれます。 また、Select 句には静的な値を含めることもできます。 たとえば、次のコード例は、Select 句で ProductNamePriceDiscount、および DiscountedPrice の 4 つのメンバーを持つ新しい匿名型としてクエリ結果を定義するクエリ式を示しています。 ProductName メンバーと Price メンバーの値は、From 句で定義されている製品の範囲変数から取得されます。 DiscountedPrice メンバーの値は、Let 句で計算されます。 Discount メンバーは静的な値です。

' 10% discount 
Dim discount_10 = 0.1
Dim priceList =
  From product In products
  Let DiscountedPrice = product.UnitPrice * (1 - discount_10)
  Select product.ProductName, Price = product.UnitPrice,
  Discount = discount_10, DiscountedPrice

Select 句には、後続のクエリ句の範囲変数の新しいセットが導入され、以前の範囲変数はスコープに含まれなくなりました。 クエリ式の最後の Select 句によって、クエリの戻り値が決まります。 たとえば、次のクエリでは、合計が 500 を超えるすべての顧客の注文の会社名と注文 ID が返されます。 最初の Select 句は、Where 句と 2 番目の Select 句の範囲変数を識別します。 2 番目の Select 句は、クエリによって返される値を新しい匿名型として識別します。

Dim customerList = From cust In customers, ord In cust.Orders
                   Select Name = cust.CompanyName,
                          Total = ord.Total, ord.OrderID
                   Where Total > 500
                   Select Name, OrderID

Select 句が返される項目を 1 つ識別する場合、クエリ式はその 1 つの項目の型のコレクションを返します。 Select 句が返される項目を複数識別する場合、クエリ式は、選択した項目に基づいて、新しい匿名型のコレクションを返します。 たとえば、次の 2 つのクエリは、Select 句に基づいて 2 つの異なる型のコレクションを返します。 最初のクエリは、会社名のコレクションを文字列として返します。 2 番目のクエリは、会社名と住所情報が入力された Customer オブジェクトのコレクションを返します。

Dim customerNames = From cust In customers
                    Select cust.CompanyName

Dim customerInfo As IEnumerable(Of Customer) =
  From cust In customers
  Select New Customer With {.CompanyName = cust.CompanyName,
                             .Address = cust.Address,
                             .City = cust.City,
                             .Region = cust.Region,
                             .Country = cust.Country}

次のクエリ式では、From 句を使用して、customers コレクションに対して cust 範囲変数を宣言しています。 Select 句は、顧客名と ID 値を選択し、新しい範囲変数に対して CompanyName 列と CustomerID 列を設定します。 For Each ステートメントは、返された各オブジェクトをループし、各レコードの CompanyName 列と CustomerID 列を表示します。

Sub SelectCustomerNameAndId(ByVal customers() As Customer)
    Dim nameIds = From cust In customers
                  Select cust.CompanyName, cust.CustomerID
    For Each nameId In nameIds
        Console.WriteLine(nameId.CompanyName & ": " & nameId.CustomerID)
    Next
End Sub

関連項目