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

Объединяет две коллекции в одну иерархическую коллекцию. Операция соединения основана на сопоставлении ключей.

Синтаксис

Group Join element [As type] In collection _  
  On key1 Equals key2 [ And key3 Equals key4 [... ] ] _  
  Into expressionList  

Детали

Термин Определение
element Обязательный. Переменная элемента управления для присоединяемой коллекции.
type Необязательно. Тип параметра element. Если значение не type указано, тип element выводится из collection.
collection Обязательный. Коллекция для объединения с коллекцией, которая находится слева Group Join от оператора. Предложение Group Join может быть вложено в Join предложение или в другое Group Join предложение.
key1 Equals key2 Обязательный. Определяет ключи для присоединенных коллекций. Необходимо использовать Equals оператор для сравнения ключей из присоединенных коллекций. Условия соединения можно объединить с помощью And оператора для идентификации нескольких ключей. Параметр key1 должен находиться в коллекции слева Join от оператора. Параметр key2 должен находиться в коллекции справа Join от оператора.

Ключи, используемые в условии соединения, могут быть выражениями, которые включают несколько элементов из коллекции. Однако каждое ключевое выражение может содержать только элементы из соответствующей коллекции.
expressionList Обязательный. Одно или несколько выражений, определяющих, как объединяются группы элементов из коллекции. Чтобы определить имя члена для сгруппированных результатов, используйте Group ключевое слово (<alias> = Group). Вы также можете включать агрегатные функции для применения к группе.

Замечания

Предложение Group Join объединяет две коллекции на основе сопоставления ключевых значений из присоединенных коллекций. Результирующая коллекция может содержать элемент, ссылающийся на коллекцию элементов из второй коллекции, которая соответствует значению ключа из первой коллекции. Можно также указать агрегатные функции для применения к сгруппированным элементам из второй коллекции. Сведения о агрегатных функциях см. в предложении "Агрегат".

Рассмотрим, например, коллекцию руководителей и коллекцию сотрудников. Элементы из обеих коллекций имеют свойство ManagerID, определяющее сотрудников, которые сообщают конкретному руководителю. Результаты операции соединения будут содержать результат для каждого руководителя и сотрудника с соответствующим значением ManagerID. Результаты операции содержат полный Group Join список руководителей. Каждый результат менеджера будет иметь член, ссылающийся на список сотрудников, которые были совпадением для конкретного руководителя.

Коллекция, полученная из Group Join операции, может содержать любое сочетание значений из коллекции, определенной в From предложении, и выражений, определенных в Into предложении Group Join предложения. Дополнительные сведения о допустимых выражениях предложения Into см. в разделе "Агрегатное предложение".

Операция Group Join вернет все результаты из коллекции, идентифицированной слева Group Join от оператора. Это верно, даже если в коллекции нет совпадений, присоединенных к ней. Это похоже на LEFT OUTER JOIN SQL.

Предложение можно использовать Join для объединения коллекций в одну коллекцию. Это эквивалентно INNER JOIN sql.

Пример

Следующий пример кода объединяет две коллекции с помощью Group Join предложения.

Dim customerList = From cust In customers
                   Group Join ord In orders On
                   cust.CustomerID Equals ord.CustomerID
                   Into CustomerOrders = Group,
                        OrderTotal = Sum(ord.Total)
                   Select cust.CompanyName, cust.CustomerID,
                          CustomerOrders, OrderTotal

For Each customer In customerList
    Console.WriteLine(customer.CompanyName &
                      " (" & customer.OrderTotal & ")")

    For Each order In customer.CustomerOrders
        Console.WriteLine(vbTab & order.OrderID & ": " & order.Total)
    Next
Next

См. также