Clausola Join (Visual Basic)
Combina due raccolte in un'unica raccolta.L'operazione di join è basata sulla corrispondenza di chiavi e utilizza l'operatore Equals.
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
Parti
element
Necessario.La variabile di controllo per la raccolta da unire.collection
Necessario.La raccolta da combinare con la raccolta identificata sul lato sinistro dell'operatore Join.Una clausola Join può essere annidata in un'altra clausola Join o in una clausola Group Join.joinClause
Opzionale.Uno o più clausole Join aggiuntive per perfezionare la query.groupJoinClause
Opzionale.Uno o più clausole Group Join aggiuntive per perfezionare la query.key1Equalskey2
Necessario.Identifica le chiavi per le raccolte da unire.È necessario utilizzare l'operatore Equals per confrontare le chiavi dalle raccolte da unire.È possibile combinare condizioni di join utilizzando l'operatore And per identificare più chiavi.Il parametro key1 deve provenire dalla raccolta sul lato sinistro dell'operatore Join.Il parametro key2 deve provenire dalla raccolta sul lato destro dell'operatore Join.Le chiavi utilizzate nella condizione di join possono essere espressioni che includono più di un elemento della raccolta.Tuttavia ogni espressione di chiave può contenere solo elementi della rispettiva raccolta.
Note
La clausola Join combina due raccolte in base ai valori chiave corrispondenti delle raccolte da unire.La raccolta risultante può contenere qualsiasi combinazione di valori dalla raccolta identificata sul lato sinistro dell'operatore Join e dalla raccolta identificata nella clausola Join.La query restituirà solo risultati per cui la condizione specificata dall'operatore Equals è soddisfatta.Equivale ad un INNER JOIN in SQL.
È possibile utilizzare più clausole Join in una query per unire due o più raccolte in un'unica raccolta.
È possibile eseguire un join implicito per unire raccolte senza la clausola Join.Per eseguire questa operazione, includere più clausole In nella clausola From e specificare una clausola Where che identifica le chiavi da utilizzare per il join.
È possibile utilizzare la clausola Group Join per combinare più raccolte in un' unica raccolta gerarchica.Equivale a LEFT OUTER JOIN in SQL.
Esempio
Nell'esempio di codice seguente viene illustrato come eseguire un join implicito per combinare un elenco di clienti con i rispettivi ordini.
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
Nell'esempio di codice seguente vengono unite due raccolte utilizzando la clausola 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
In questo esempio viene prodotto un output simile al seguente:
winlogon (968), Windows Logon
explorer (2424), File Explorer
cmd (5136), Command Window
Nell'esempio di codice seguente viene illustrato come unire due raccolte utilizzando la clausola Joincon due colonne di chiavi.
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
In questo esempio viene prodotto un output simile al seguente:
winlogon (968), Windows Logon, Priority = 13
cmd (700), Command Window, Priority = 8
explorer (2424), File Explorer, Priority = 8
Vedere anche
Riferimenti
Clausola Select (Visual Basic)
Clausola Group Join (Visual Basic)
Concetti
Introduzione a LINQ in Visual Basic