Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 unida.
collection
Obrigatório A coleção a ser combinada 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 as chaves para as coleções ingressadas. Você deve usar o Equals operador para comparar as chaves das coleções ingressadas. Você pode combinar condições de junção usando o And operador para identificar várias chaves.
key1 deve ser da coleção no lado esquerdo do Join operador.
key2 deve ser da coleção no 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 respectiva coleção.
Observações
A Join cláusula combina duas coleções com base na correspondência de valores de chave das coleções ingressadas. A coleção resultante pode conter qualquer combinação de valores da coleção identificada no lado esquerdo do Join operador e a coleção identificada na Join cláusula. A consulta retornará apenas os resultados para os quais a condição especificada pelo Equals operador é atendida. Isso é equivalente a um INNER JOIN SQL no 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 junção.
Você pode usar a Group Join cláusula para combinar coleções em uma única coleção hierárquica. Isso é como um LEFT OUTER JOIN 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