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 子句隐式联接集合,也可以使用 JoinGroup 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 子句可以后跟其他查询子句的任意组合,以优化查询。 你可以通过以下方式优化查询:

  • 使用 FromSelect 子句隐式组合多个集合,或使用 JoinGroup Join 子句显式组合多个集合。

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

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

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

  • 使用 Aggregate 子句确定要对整个查询结果进行评估的聚合函数。

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

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

  • 使用 SkipTakeSkip WhileTake While 子句标识要返回的结果的各个部分。

示例

下面的查询表达式使用 From 子句为 customers 集合中的每个 Customer 对象声明范围变量 custWhere 子句使用范围变量将输出限制为来自指定区域的客户。 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

另请参阅