From 子句 (Visual Basic)

指定要查询的一个或多个范围变量和集合。

语法

From element [ As type ] In collection [ _ ]  
  [, element2 [ As type2 ] In collection2 [, ... ] ]  

部件

术语 定义
element 必填。 一个范围 变量 ,用于循环访问集合的元素。 范围变量用于引用查询循环访问collection的每个成员collection。 必须是可枚举的类型。
type 可选。 element 的类型。 如果未type指定,则从中推断出collectionelement类型。
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 子句隐式合并多个集合,或者通过使用 JoinGroup Join 子句显式合并多个集合。

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

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

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

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

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

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

  • 使用SkipTakeSkip 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

另请参阅