クエリの結果を定義します。
構文
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