Compartilhar via


Cláusula Join (Visual Basic)

Combina duas coleções numa única. O operador adicionar é baseado em chaves combinadas e usa o operador Equals.

Join element In collection _
  [ joinClause _ ] 
  [ groupJoinClause ... _ ] 
On key1 Equals key2 [ And key3 Equals key4 [... ]

Partes

  • element
    Obrigatório. A variável de controle para a coleção sendo juntada.

  • collection
    Obrigatório. A coleção a combinar com a coleção identificada no lado esquerdo do operador Join. A cláusula Join pode ser acomodada em outra cláusula Join ou Group Join.

  • joinClause
    Opcional. Uma ou mais cláusulas Join adicionais para refinar a pergunta mais adiante.

  • groupJoinClause
    Opcional. Uma ou mais cláusulas Group Join adicionais para refinar a consulta mais adiante.

  • key1 Equals key2
    Obrigatório. Identifica chaves para as coleções que estão sendo combinadas. Você deve usar o operador Equals para comparar chaves das coleções que estão sendo combinadas. Você pode combinar condições de associação, usando o operador And para identificar várias chaves. key1 deve ser do coleção no lado esquerdo do operador de Join . key2 deve ser do coleção no lado direito do operador de Join .

    As chavesa usadas na condição de adição podem ser expressões que incluem mais de um item da coleção. Entretanto, cada expressão chave pode conter somente itens da sua respectiva coleção

Comentários

A cláusula Join combina duas coleções baseadas nos valores das chaves que combinam das coleções sendo combinadas. A coleção resultante pode conter qualquer combinação de valores da coleção no lado esquerdo do operador Join e na coleção identificada na cláusula Join. A consulta retorna apenas resultados para os quais a condição especificada pelo operador Equals é satisfeita. Isso é equivalente a um INNER JOIN no SQL.

Você pode usar várias cláusulas Join numa consulta para unir dois ou mais coleções numa coleção única.

Você pode realizar uma adição implícita para combinar coleções sem a cláusula Join. Para fazer isso, inlcua várias cláusulas In na sua cláusula From e especifique uma cláusula Where que identifica as chaves que você deseja usar para a adição.

Você pode usar a cláusula Group Join para combinar coleções em uma única coleção hierárquica. É como um LEFT OUTER JOIN no SQL.

Exemplo

O exemplo de código a seguir realiza uma adição implícita para combinar uma lista de clientes com seus pedidos.

Dim customerIDs() = {"ALFKI", "VICTE", "BLAUS", "TRAIH"}

Dim customerList = From cust In customers, custID In customerIDs
                   Where cust.CustomerID = custID
                   Select cust.CompanyName

For Each companyName In customerList
  Console.WriteLine(companyName)
Next

O exemplo de código a seguir une duas coleções usando a cláusula Join.

Imports System.Diagnostics
Imports System.Security.Permissions

Public Class JoinSample

  <SecurityPermission(SecurityAction.Demand)>
  Public Sub ListProcesses()
    Dim processDescriptions As New List(Of ProcessDescription)
    processDescriptions.Add(New ProcessDescription With {
                                .ProcessName = "explorer",
                                .Description = "Windows Explorer"})
    processDescriptions.Add(New ProcessDescription With {
                                .ProcessName = "winlogon",
                                .Description = "Windows Logon"})
    processDescriptions.Add(New ProcessDescription With {
                                .ProcessName = "cmd",
                                .Description = "Command Window"})
    processDescriptions.Add(New ProcessDescription With {
                                .ProcessName = "iexplore",
                                .Description = "Internet Explorer"})

    Dim processes = From proc In Process.GetProcesses
                    Join desc In processDescriptions
                      On proc.ProcessName Equals desc.ProcessName
                    Select proc.ProcessName, proc.Id, desc.Description

    For Each proc In processes
      Console.WriteLine("{0} ({1}), {2}",
                        proc.ProcessName, proc.Id, proc.Description)
    Next 
  End Sub 

End Class 

Public Class ProcessDescription
  Public ProcessName As String 
  Public Description As String 
End Class

Este exemplo produzirá saída igual à seguinte:

winlogon (968), Windows Logon

explorer (2424), File Explorer

cmd (5136), Command Window

O exemplo de código a seguir une duas coleções usando a cláusula Join com duas colunas de chaves.

Imports System.Diagnostics
Imports System.Security.Permissions

Public Class JoinSample2

  <SecurityPermission(SecurityAction.Demand)>
  Public Sub ListProcesses()
    Dim processDescriptions As New List(Of ProcessDescription2)

    ' 8 = Normal priority, 13 = High priority
    processDescriptions.Add(New ProcessDescription2 With {
                                .ProcessName = "explorer",
                                .Description = "Windows Explorer",
                                .Priority = 8})
    processDescriptions.Add(New ProcessDescription2 With {
                                .ProcessName = "winlogon",
                                .Description = "Windows Logon",
                                .Priority = 13})
    processDescriptions.Add(New ProcessDescription2 With {
                                .ProcessName = "cmd",
                                .Description = "Command Window",
                                .Priority = 8})
    processDescriptions.Add(New ProcessDescription2 With {
                                .ProcessName = "iexplore",
                                .Description = "Internet Explorer",
                                .Priority = 8})

    Dim processes = From proc In Process.GetProcesses
                    Join desc In processDescriptions
                      On proc.ProcessName Equals desc.ProcessName And 
                         proc.BasePriority Equals desc.Priority
                    Select proc.ProcessName, proc.Id, desc.Description,
                           desc.Priority

    For Each proc In processes
      Console.WriteLine("{0} ({1}), {2}, Priority = {3}",
                        proc.ProcessName,
                        proc.Id,
                        proc.Description,
                        proc.Priority)
    Next 
  End Sub 

End Class 

Public Class ProcessDescription2
  Public ProcessName As String 
  Public Description As String 
  Public Priority As Integer 
End Class

Este exemplo produzirá saída igual à seguinte:

winlogon (968), Windows Logon, Priority = 13

cmd (700), Command Window, Priority = 8

explorer (2424), File Explorer, Priority = 8

Consulte também

Referência

Cláusula Select (Visual Basic)

Cláusula From (Visual Basic)

Cláusula Join Group (Visual Basic)

Cláusula Where (Visual Basic)

Conceitos

Introdução a LINQ no Visual Basic

Outros recursos

Consultas (Visual Basic)