Select 子句 (Visual Basic)

更新:2007 年 11 月

定义查询的结果。

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 的每个客户订单的公司名称和订单 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 值,并填充新范围变量的 Name 和 ID 列。For Each 语句循环访问返回的每个对象,并显示每条记录的 Name 和 ID 列。

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 子句 (Visual Basic)

Where 子句 (Visual Basic)

Order By 子句 (Visual Basic)

其他资源

查询 (Visual Basic)