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 Join Group (Visual Basic)
Conceitos
Introdução a LINQ no Visual Basic