Предложение From (Visual Basic)

Указывает один или несколько переменных диапазонов и коллекцию для выполнения запроса.

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

Части

Термин

Определение

element

Обязательный. range variable используется для циклического просмотра элементов коллекции. Переменная диапазона используется для ссылки на каждый член collection, когда запрос циклически просматривает collection. Должно быть перечислимым типом.

type

Необязательный. Тип element. Если не указан type, тип element получается из collection.

collection

Обязательный. Ссылка на коллекцию, которая будет запрашиваться. Должно быть перечислимым типом.

Заметки

Предложение From используется для определения источника данных для запроса и переменных, которые используются для ссылок на элементы из исходной коллекции. Эти переменные называются range variables. Предложение 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 для объявления диапазона переменной cust для каждого объекта Customer в коллекции customers. Предложение 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

См. также

Ссылки

Оператор 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)

Основные понятия

Знакомство с LINQ в Visual Basic

Другие ресурсы

Запросы (Visual Basic)