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)