Select 子句 (Visual Basic)
定義查詢的結果。
語法
Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]
組件
var1
選擇性。 可用來參考資料行運算式結果的別名。
fieldName1
必要。 在查詢結果中傳回的欄位名稱。
備註
您可以使用 Select
子句來定義要從查詢傳回的結果。 這可讓您定義透過查詢建立新匿名型別的成員,或將查詢所傳回具名型別的成員設為目標。 查詢不需要 Select
子句。 如果未指定 Select
子句,查詢會根據為目前範圍所識別範圍變數的所有成員傳回型別。 如需詳細資訊,請參閱匿名型別。 當查詢建立具名型別時,將會傳回型別 IEnumerable<T> 的結果,其中 T
是建立的型別。
Select
子句可以參考目前範圍中的任何變數。 這包括 From
子句 (或 From
子句) 中識別的範圍變數。 這也包括由 Aggregate
、Let
、Group By
或 Group Join
子句建立具有別名的任何新變數,或查詢運算式中上一個 Select
子句的變數。 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
子句會識別 Where
子句的範圍變數和第二個 Select
子句。 第二個 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
子句來宣告 customers
集合的範圍變數 cust
。 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