From 子句 (Visual Basic)
指定一个或多个范围变量以及一个要查询的集合。
语法
From element [ As type ] In collection [ _ ]
[, element2 [ As type2 ] In collection2 [, ... ] ]
组成部分
术语 | 定义 |
---|---|
element |
必需。 用于循环访问集合中的元素的范围变量。 当查询遍历 collection 时,范围变量用于引用 collection 的每个成员。 必须为可枚举类型。 |
type |
可选。 element 的类型。 如果未指定 type ,则从 collection 推断 element 的类型。 |
collection |
必需。 引用要查询的集合。 必须为可枚举类型。 |
注解
From
子句用来标识查询的源数据,以及用于引用源集合中的元素的变量。 这些变量称为“范围变量”。 对于一个查询,From
子句是必需的,除非 Aggregate
子句用于标识仅返回聚合结果的查询。 有关详细信息,请参阅 Aggregate 子句。
可以在查询中指定多个 From
子句,以标识要联接的多个集合。 在指定多个集合时,它们将被单独循环访问,如果它们是相关的,你可以联接它们。 可以使用 Select
子句隐式联接集合,也可以使用 Join
或 Group Join
子句显式联接集合。 作为替代方法,可以在单个 From
子句中指定多个范围变量和集合,其中每个相关范围变量和集合都用逗号分隔。 下面的代码示例展示了 From
子句的两个语法选项。
' Multiple From clauses in a query.
Dim result = From var1 In collection1, var2 In collection2
' Equivalent syntax with a single From clause.
Dim result2 = From var1 In collection1
From var2 In collection2
From
子句定义查询的范围,它类似于 For
循环的范围。 因此,查询的范围内的每个 element
范围变量都必须具有一个唯一的名称。 由于可以为一个查询指定多个 From
子句,因此后续 From
子句可以引用 From
子句中的范围变量,也可以引用之前 From
子句中的范围变量。 例如,下面的示例展示了一个嵌套的 From
子句,其中第二个子句中的集合基于第一个子句中范围变量的属性。
Dim allOrders = From cust In GetCustomerList()
From ord In cust.Orders
Select ord
每个 From
子句可以后跟其他查询子句的任意组合,以优化查询。 你可以通过以下方式优化查询:
使用
From
和Select
子句隐式组合多个集合,或使用Join
或Group Join
子句显式组合多个集合。使用
Where
子句筛选查询结果。使用
Order By
子句对结果进行排序。使用子句将
Group By
相似结果分组在一起。使用
Aggregate
子句确定要对整个查询结果进行评估的聚合函数。使用
Let
子句引入一个迭代变量,其值由表达式而不是集合决定。使用
Distinct
子句忽略重复的查询结果。使用
Skip
、Take
、Skip While
和Take While
子句标识要返回的结果的各个部分。
示例
下面的查询表达式使用 From
子句为 customers
集合中的每个 Customer
对象声明范围变量 cust
。 Where
子句使用范围变量将输出限制为来自指定区域的客户。 For Each
循环在查询结果中显示每个客户的公司名称。
Sub DisplayCustomersForRegion(ByVal customers As List(Of Customer),
ByVal region As String)
Dim customersForRegion = From cust In customers
Where cust.Region = region
For Each cust In customersForRegion
Console.WriteLine(cust.CompanyName)
Next
End Sub