From 子句 (Visual Basic)

更新:2007 年 11 月

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

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

组成部分

  • element
    必需。一个范围变量,用于循环访问集合的元素。一个范围变量,用于在查询循环访问 collection 时,引用 collection 的每个成员。必须为可枚举类型。

  • type
    可选。element 的类型。如果不指定 type,则从 collection 推断 element 的类型。

  • collection
    必需。引用要查询的集合。必须为可枚举类型。

备注

From 子句用于标识查询的源数据,以及用于引用源集合中元素的变量。这些变量称为范围变量。查询必须使用 From 子句,除非使用 Aggregate 子句来标识仅返回聚合结果的查询。有关更多信息,请参见 Aggregate 子句 (Visual Basic)

可以指定查询中的多个 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

请参见

概念

Visual Basic 中的 LINQ 简介

参考

For Each...Next 语句 (Visual Basic)

For...Next 语句 (Visual Basic)

Select 子句 (Visual Basic)

Where 子句 (Visual Basic)

Aggregate 子句 (Visual Basic)

Distinct 子句 (Visual Basic)

Join 子句 (Visual Basic)

Group Join 子句 (Visual Basic)

Order By 子句 (Visual Basic)

Let 子句 (Visual Basic)

Skip 子句 (Visual Basic)

Take 子句 (Visual Basic)

Skip While 子句 (Visual Basic)

Take While 子句 (Visual Basic)

其他资源

查询 (Visual Basic)