Select 子句 (Visual Basic)

定义查询的结果。

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

部件

  • var1
    可选。 可用于引用列表达式的结果的别名。

  • fieldName1
    必选。 要在查询结果中返回的字段的名称。

备注

使用 Select 子句可以定义要从查询中返回的结果。 这使您可以定义由查询创建的新匿名类型的成员,或指定由查询返回的命名类型的成员。 Select 子句不是查询所必需的。 如果未指定 Select 子句,查询将根据为当前范围标识的范围变量的所有成员返回一个类型。 有关更多信息,请参见匿名类型 (Visual Basic)。 当查询创建命名类型时,它将返回类型为 IEnumerable 的结果,其中 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 的每个客户订单的公司名称和订单 ID。 第一个 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 子句选择客户名称和 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

请参见

参考

From 子句 (Visual Basic)

Where 子句 (Visual Basic)

Order By 子句 (Visual Basic)

概念

Visual Basic 中的 LINQ 简介

匿名类型 (Visual Basic)

其他资源

查询 (Visual Basic)