定義查詢的結果。
語法
Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]
組件
var1
選擇性。 可用來參考數據行表達式結果的別名。
fieldName1
必須的。 查詢結果中要傳回的功能變數名稱。
備註
您可以使用 Select 子句來定義要從查詢傳回的結果。 這可讓您定義查詢所建立之新匿名型別的成員,或以查詢所傳回之具名型別的成員為目標。 查詢不需要 子 Select 句。
Select如果未指定子句,查詢會根據目前範圍所識別之範圍變數的所有成員傳回類型。 如需詳細資訊,請參閱 匿名型別。 當查詢建立具名類型時,它會傳回類型 IEnumerable<T> 的結果,其中 T 是建立的類型。
子 Select 句可以參考目前範圍中的任何變數。 這包括 子句中識別 From 的範圍變數(或 From 子句)。 它也包含查詢表達式中先前Select子句中、、 Group By或 Group Join 子句所建立之別名AggregateLet所建立的任何新變數。 子 Select 句也可以包含靜態值。 例如,下列程式代碼範例顯示查詢表達式,其中 子句會將 Select 查詢結果定義為具有四個成員的新匿名類型: ProductName、 Price、 Discount和 DiscountedPrice。
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個的客戶訂單,傳回公司名稱和訂單標識碼。 第一個Select子句會識別 子句和第二Select個子句的範圍變數Where。 第二 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如果 子句識別要傳回的單一專案,查詢表達式會傳回該單一專案類型的集合。
Select如果 子句識別要傳回的多個專案,則查詢表達式會根據選取的專案傳回新匿名類型的集合。 例如,下列兩個查詢會根據 Select 子句傳回兩種不同類型的集合。 第一個查詢會以字串的形式傳回公司名稱的集合。 第二個查詢會傳回物件集合 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 子句來宣告集合的範圍變數custcustomers。 子 Select 句會選取客戶名稱和標識碼值,並填入 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 子句
- 匿名類型