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句隐式联接集合,也可以使用或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 and Select 子句隐式合并多个集合,或者通过使用 Join 或 Group Join 子句显式合并多个集合。

  • Where使用子句筛选查询结果。

  • 使用 Order By 子句对结果进行排序。

  • 使用 Group By 子句将相似结果组合在一起。

  • 使用 Aggregate 子句标识聚合函数以计算整个查询结果。

  • 使用 Let 子句引入一个迭代变量,其值由表达式而不是集合决定。

  • Distinct使用子句忽略重复的查询结果。

  • 使用Skip和TakeSkip WhileTake While子句标识要返回的结果部分。

示例:

以下查询表达式使用子From句为集合中的每个customers对象声明范围变量custCustomer。 子 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

另请参阅