Select 子句 (Visual Basic)

定义查询的结果。

语法

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

部件

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

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

注解

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

Select 句可以引用当前作用域中的任何变量。 这包括子句(或From子句)中From标识的范围变量。 它还包括查询表达式中上Select一子句中的别名Group ByLetAggregate、子句或Group Join变量创建的任何新变量。 子 Select 句还可以包含静态值。 例如,下面的代码示例显示了一个查询表达式,其中子句将 Select 查询结果定义为具有四个成员的新匿名类型: ProductNamePriceDiscountDiscountedPricePrice成员ProductName值取自子句中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 一个子句确定查询的返回值。 例如,以下查询返回每个客户订单的公司名称和订单 ID,总订单数超过 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句声明集合的范围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

另请参阅