定义查询的结果。
语法
Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]
部件
var1
可选。 可用于引用列表达式结果的别名。
fieldName1
必填。 查询结果中要返回的字段的名称。
注解
可以使用子 Select
句定义要从查询返回的结果。 这样,便可以定义由查询创建的新匿名类型的成员,或以查询返回的命名类型的成员为目标。 查询不需要子 Select
句。
Select
如果未指定子句,查询将基于为当前范围标识的范围变量的所有成员返回类型。 有关详细信息,请参阅 匿名类型。 当查询创建命名类型时,它将返回在其中T
创建类型的类型IEnumerable<T>的结果。
子 Select
句可以引用当前作用域中的任何变量。 这包括子句(或From
子句)中From
标识的范围变量。 它还包括查询表达式中上Select
一子句中的别名Group By
Let
Aggregate
、子句或Group Join
变量创建的任何新变量。 子 Select
句还可以包含静态值。 例如,下面的代码示例显示了一个查询表达式,其中子句将 Select
查询结果定义为具有四个成员的新匿名类型: ProductName
、 Price
、 Discount
和 DiscountedPrice
。
Price
成员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