Cláusula Join (Visual Basic)
Combina duas coleções em uma única coleção. A operação de junção é baseada em chaves correspondentes e usa o Equals
operador.
Sintaxe
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
Partes
element
Necessário. A variável de controle para a coleção que está sendo associada.
collection
Obrigatório. A coleção a combinar com a coleção identificada no lado esquerdo do Join
operador. Uma Join
cláusula pode ser aninhada em outra Join
cláusula ou em uma Group Join
cláusula.
joinClause
Opcional. Uma ou mais cláusulas adicionais Join
para refinar ainda mais a consulta.
groupJoinClause
Opcional. Uma ou mais cláusulas adicionais Group Join
para refinar ainda mais a consulta.
key1
Equals
key2
Obrigatório. Identifica chaves para as coleções que estão sendo unidas. Você deve usar o Equals
operador para comparar chaves das coleções que estão sendo unidas. Você pode combinar condições de junção usando o And
operador para identificar várias chaves. key1
deve ser da coleção do lado esquerdo do Join
operador. key2
deve ser da recolha do lado direito do Join
operador.
As chaves usadas na condição de junção podem ser expressões que incluem mais de um item da coleção. No entanto, cada expressão de chave pode conter apenas itens de sua respetiva coleção.
Observações
A Join
cláusula combina duas coleções com base na correspondência de valores-chave das coleções que estão sendo unidas. A coleção resultante pode conter qualquer combinação de valores da coleção identificada no lado esquerdo do Join
operador e da coleção identificada na Join
cláusula. A consulta retornará apenas resultados para os quais a condição especificada pelo Equals
operador é atendida. Isso é equivalente a um INNER JOIN
em SQL.
Você pode usar várias Join
cláusulas em uma consulta para unir duas ou mais coleções em uma única coleção.
Você pode executar uma junção implícita para combinar coleções sem a Join
cláusula. Para fazer isso, inclua várias In
cláusulas em sua From
cláusula e especifique uma Where
cláusula que identifique as chaves que você deseja usar para a associação.
Você pode usar a Group Join
cláusula para combinar coleções em uma única coleção hierárquica. Isto é como um LEFT OUTER JOIN
em SQL.
Exemplo 1
O exemplo de código a seguir executa uma junçã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
Exemplo 2
O exemplo de código a seguir une duas coleções usando a Join
cláusula .
Imports System.Diagnostics
Public Class JoinSample
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á uma saída semelhante à seguinte:
winlogon (968), Windows Logon
explorer (2424), File Explorer
cmd (5136), Command Window
Exemplo 3
O exemplo de código a seguir une duas coleções usando a Join
cláusula com duas colunas de chave.
Imports System.Diagnostics
Public Class JoinSample2
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
O exemplo produzirá uma saída semelhante à seguinte:
winlogon (968), Windows Logon, Priority = 13
cmd (700), Command Window, Priority = 8
explorer (2424), File Explorer, Priority = 8