Select 子句 (Visual Basic)

定义查询的结果。

语法

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

组成部分

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

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

注解

可以使用 Select 子句来定义要从查询返回的结果。 这使您可以定义由查询创建的新匿名类型的成员,或指定查询所返回的命名类型的成员。 查询不需要 Select 子句。 如果未指定 Select 子句,则查询将返回基于为当前范围标识的范围变量的所有成员的类型。 有关详细信息,请参阅匿名类型。 当查询创建命名类型时,它将返回 IEnumerable<T> 类型的结果,其中 T 是创建的类型。

Select 子句可以引用当前范围内的任何变量。 这包括在 From 子句(或 From 子句)中标识的范围变量。 它还包括由 AggregateLetGroup ByGroup Join 子句使用别名创建的任何新变量,或来自查询表达式中前一个 Select 子句的变量。 Select 子句还可以包含静态值。 例如,以下代码示例显示了一个查询表达式,其中 Select 子句将查询结果定义为具有四个成员的新匿名类型,分别为:ProductNamePriceDiscountDiscountedPriceProductNamePrice 成员值取自 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 集合声明范围变量 custSelect 子句选择客户名称和 ID 值并填充新范围变量的 CompanyNameCustomerID 列。 For Each 语句循环遍历每个返回的对象并显示每条记录的 CompanyNameCustomerID 列。

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

另请参阅