Partilhar via


Cláusula de adição (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 consulta mais adiante.

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

  • key1Equalskey2
    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 de coleção de no lado esquerdo das Join operador. key2 deve ser de coleção de no lado direito das Join operador.

    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), Windows 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), Windows Explorer, Priority = 8

Consulte também

Conceitos

Introdução ao LINQ no Visual Basic

Referência

Cláusula Select (Visual Basic)

A partir da cláusula (Visual Basic)

Cláusula Join Group (Visual Basic)

Clúasula Where (Visual Basic)

Outros recursos

Consultas(Visual Basic)