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

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

Синтаксис

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

Детали

Термин Определение
element Обязательный. Переменная диапазона, используемая для итерации элементов коллекции. Переменная диапазона используется для ссылки на каждый член collection запроса в качестве итератора collectionзапроса. Должен быть перечисленным типом.
type Необязательно. Тип параметра element. Если значение не type указано, тип element выводится из collection.
collection Обязательный. Ссылается на коллекцию, запрашиваемую. Должен быть перечисленным типом.

Замечания

Предложение From используется для идентификации исходных данных для запроса и переменных, используемых для ссылки на элемент из исходной коллекции. Эти переменные называются переменными диапазона. Предложение From требуется для запроса, за исключением случаев, когда Aggregate предложение используется для идентификации запроса, возвращающего только агрегированные результаты. Дополнительные сведения см. в разделе "Агрегированное предложение".

В запросе можно указать несколько предложений, чтобы определить несколько 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предложений , TakeSkip 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

См. также