クエリの結果を定義します。
構文
Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]
部品
var1
任意。 列式の結果を参照するために使用できるエイリアス。
fieldName1
必須。 クエリ結果で返すフィールドの名前。
注釈
Select
句を使用して、クエリから返す結果を定義できます。 これにより、クエリによって作成される新しい匿名型のメンバーを定義するか、クエリによって返される名前付き型のメンバーを対象とすることができます。 クエリには、 Select
句は必要ありません。
Select
句が指定されていない場合、クエリは現在のスコープで識別された範囲変数のすべてのメンバーに基づいて型を返します。 詳細については、「 匿名型」を参照してください。 クエリが名前付き型を作成すると、T
が作成された型IEnumerable<T>型の結果が返されます。
Select
句は、現在のスコープ内の任意の変数を参照できます。 これには、 From
句 (または From
句) で識別される範囲変数が含まれます。 また、 Aggregate
、 Let
、 Group By
、または Group Join
句によってエイリアスを使用して作成された新しい変数、またはクエリ式の前の Select
句の変数も含まれます。
Select
句には静的な値を含めることもできます。 たとえば、次のコード例は、 Select
句がクエリ結果を、 ProductName
、 Price
、 Discount
、 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
こちらも参照ください
- Visual Basic での LINQ の概要
- クエリ
- From 句
- Where 句
- Order By 句
- 匿名型
.NET