指定要查询的一个或多个范围变量和集合。
语法
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
句隐式联接集合,也可以使用或Group Join
子句显式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
andSelect
子句隐式合并多个集合,或者通过使用Join
或Group Join
子句显式合并多个集合。Where
使用子句筛选查询结果。使用
Order By
子句对结果进行排序。使用
Group By
子句将相似结果组合在一起。使用
Aggregate
子句标识聚合函数以计算整个查询结果。使用
Let
子句引入一个迭代变量,其值由表达式而不是集合决定。Distinct
使用子句忽略重复的查询结果。使用
Skip
和Take
Skip While
Take While
子句标识要返回的结果部分。
示例:
以下查询表达式使用子From
句为集合中的每个customers
对象声明范围变量cust
Customer
。 子 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