Select 句 (Visual Basic)Select Clause (Visual Basic)

クエリの結果を定義します。Defines the result of a query.

構文Syntax

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

指定項目Parts

var1
任意。Optional. 列式の結果を参照するために使用できる別名。An alias that can be used to reference the results of the column expression.

fieldName1
必須。Required. クエリ結果に返されるフィールドの名前。The name of the field to return in the query result.

コメントRemarks

@No__t-0 句を使用すると、クエリから返される結果を定義できます。You can use the Select clause to define the results to return from a query. これにより、クエリによって作成された新しい匿名型のメンバーを定義することも、クエリによって返される名前付きの型のメンバーを対象にすることもできます。This enables you to either define the members of a new anonymous type that is created by a query, or to target the members of a named type that is returned by a query. @No__t-0 句は、クエリには必要ありません。The Select clause is not required for a query. @No__t-0 句が指定されていない場合、クエリは、現在のスコープで特定された範囲変数のすべてのメンバーに基づいて型を返します。If no Select clause is specified, the query will return a type based on all members of the range variables identified for the current scope. 詳細については、「匿名型」を参照してください。For more information, see Anonymous Types. クエリで名前付きの型を作成すると、型 IEnumerable<T> の結果が返されます。この場合、T は作成された型です。When a query creates a named type, it will return a result of type IEnumerable<T> where T is the created type.

@No__t-0 句は、現在のスコープ内の任意の変数を参照できます。The Select clause can reference any variables in the current scope. これには、From 句 (または @no__t 句) で識別される範囲変数が含まれます。This includes range variables identified in the From clause (or From clauses). また、別名を使用して作成された新しい変数も、AggregateLetGroup By、または Group Join の各句、またはクエリ式の前の Select 句の変数によって作成されます。It also includes any new variables created with an alias by the Aggregate, Let, Group By, or Group Join clauses, or variables from a previous Select clause in the query expression. @No__t-0 句には、静的な値を含めることもできます。The Select clause can also include static values. たとえば、次のコード例では、Select 句でクエリ結果を、4つのメンバーを持つ新しい匿名型として定義するクエリ式を示します。 ProductNamePriceDiscount、および DiscountedPrice です。For example, the following code example shows a query expression in which the Select clause defines the query result as a new anonymous type with four members: ProductName, Price, Discount, and DiscountedPrice. @No__t-0 および Price メンバーの値は、From 句で定義されている製品範囲変数から取得されます。The ProductName and Price member values are taken from the product range variable that is defined in the From clause. @No__t 0 のメンバー値は、Let 句で計算されます。The DiscountedPrice member value is calculated in the Let clause. @No__t 0 のメンバーは静的な値です。The Discount member is a static value.

' 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

@No__t-0 句は、後続のクエリ句に対して範囲変数の新しいセットを導入し、以前の範囲変数はスコープに含まれなくなりました。The Select clause introduces a new set of range variables for subsequent query clauses, and previous range variables are no longer in scope. クエリ式の最後の Select 句によって、クエリの戻り値が決まります。The last Select clause in a query expression determines the return value of the query. たとえば、次のクエリでは、合計が500を超えるすべての顧客注文の会社名と注文 ID が返されます。For example, the following query returns the company name and order ID for every customer order for which the total exceeds 500. 最初の Select 句は、Where 句の範囲変数と2番目の Select 句を識別します。The first Select clause identifies the range variables for the Where clause and the second Select clause. 2番目の Select 句は、クエリによって返された値を新しい匿名型として識別します。The second Select clause identifies the values returned by the query as a new anonymous type.

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

@No__t-0 句によって返される1つの項目が識別される場合、クエリ式はその1つの項目の型のコレクションを返します。If the Select clause identifies a single item to return, the query expression returns a collection of the type of that single item. @No__t-0 句によって返される複数の項目が識別される場合、クエリ式は、選択した項目に基づいて、新しい匿名型のコレクションを返します。If the Select clause identifies multiple items to return, the query expression returns a collection of a new anonymous type, based on the selected items. たとえば、次の2つのクエリは、Select 句に基づいて2つの異なる型のコレクションを返します。For example, the following two queries return collections of two different types based on the Select clause. 最初のクエリでは、会社名のコレクションが文字列として返されます。The first query returns a collection of company names as strings. 2番目のクエリは、会社名と住所情報を入力した @no__t 0 オブジェクトのコレクションを返します。The second query returns a collection of Customer objects populated with the company names and address information.

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}

Example

次のクエリ式では、From 句を使用して、customers コレクションの範囲変数 cust を宣言しています。The following query expression uses a From clause to declare a range variable cust for the customers collection. @No__t-0 句は、customer name と ID 値を選択し、新しい範囲変数の CompanyNameCustomerID 列を設定します。The Select clause selects the customer name and ID value and populates the CompanyName and CustomerID columns of the new range variable. @No__t-0 ステートメントは、返された各オブジェクトをループし、各レコードに対して CompanyNameCustomerID の列を表示します。The For Each statement loops over each returned object and displays the CompanyName and CustomerID columns for each record.

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

関連項目See also