From Clause (Visual Basic)

Specifies one or more range variables and a collection to query.


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


Term Definition
element Required. A range variable used to iterate through the elements of the collection. A range variable is used to refer to each member of the collection as the query iterates through the collection. Must be an enumerable type.
type Optional. The type of element. If no type is specified, the type of element is inferred from collection.
collection Required. Refers to the collection to be queried. Must be an enumerable type.


The From clause is used to identify the source data for a query and the variables that are used to refer to an element from the source collection. These variables are called range variables. The From clause is required for a query, except when the Aggregate clause is used to identify a query that returns only aggregated results. For more information, see Aggregate Clause.

You can specify multiple From clauses in a query to identify multiple collections to be joined. When multiple collections are specified, they are iterated over independently, or you can join them if they are related. You can join collections implicitly by using the Select clause, or explicitly by using the Join or Group Join clauses. As an alternative, you can specify multiple range variables and collections in a single From clause, with each related range variable and collection separated from the others by a comma. The following code example shows both syntax options for the From clause.

' 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

The From clause defines the scope of a query, which is similar to the scope of a For loop. Therefore, each element range variable in the scope of a query must have a unique name. Because you can specify multiple From clauses for a query, subsequent From clauses can refer to range variables in the From clause, or they can refer to range variables in a previous From clause. For example, the following example shows a nested From clause where the collection in the second clause is based on a property of the range variable in the first clause.

Dim allOrders = From cust In GetCustomerList()
                From ord In cust.Orders
                Select ord

Each From clause can be followed by any combination of additional query clauses to refine the query. You can refine the query in the following ways:

  • Combine multiple collections implicitly by using the From and Select clauses, or explicitly by using the Join or Group Join clauses.

  • Use the Where clause to filter the query result.

  • Sort the result by using the Order By clause.

  • Group similar results together by using the Group By clause.

  • Use the Aggregate clause to identify aggregate functions to evaluate for the whole query result.

  • Use the Let clause to introduce an iteration variable whose value is determined by an expression instead of a collection.

  • Use the Distinct clause to ignore duplicate query results.

  • Identify parts of the result to return by using the Skip, Take, Skip While, and Take While clauses.


The following query expression uses a From clause to declare a range variable cust for each Customer object in the customers collection. The Where clause uses the range variable to restrict the output to customers from the specified region. The For Each loop displays the company name for each customer in the query result.

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
End Sub

See also