次の方法で共有


Select 句 (Visual Basic)

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

構文

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

部品

var1
任意。 列式の結果を参照するために使用できるエイリアス。

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

注釈

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

Select句は、現在のスコープ内の任意の変数を参照できます。 これには、 From 句 (または From 句) で識別される範囲変数が含まれます。 また、 AggregateLetGroup By、または Group Join 句によってエイリアスを使用して作成された新しい変数、またはクエリ式の前の Select 句の変数も含まれます。 Select句には静的な値を含めることもできます。 たとえば、次のコード例は、 Select 句がクエリ結果を、 ProductNamePriceDiscountDiscountedPriceの 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

こちらも参照ください