Clausola Join (Visual Basic)
Aggiornamento: novembre 2007
Combina due insiemi in un unico insieme. 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
Obbligatorio. La variabile di controllo per l'insieme da unire.collection
Obbligatorio. L'insieme da combinare con l'insieme identificato sul lato sinistro dell'operatore Join. Una clausola Join può essere nidificata in un'altra clausola Join o in una clausola Group Join.joinClause
Facoltativo. Uno o più clausole Join aggiuntive per perfezionare la query.groupJoinClause
Facoltativo. Uno o più clausole Group Join aggiuntive per perfezionare la query.key1Equalskey2
Obbligatorio. Identifica le chiavi per gli insiemi da unire. È necessario utilizzare l'operatore Equals per confrontare le chiavi dagli insiemi da unire. È possibile combinare le condizioni di join utilizzando l'operatore And per identificare più chiavi. key1 deve essere relativa all'insieme sul lato sinistro dell'operatore Join. key2 deve essere relativa all'insieme sul lato destro dell'operatore Join.Le chiavi utilizzate nella condizione di join possono essere espressioni che includono più di un elemento dell'insieme. Tuttavia ogni espressione di chiave può contenere solo elementi del rispettivo insieme.
Note
La clausola Join combina due insiemi in base ai valori chiave corrispondenti degli insiemi da unire. L'insieme risultante può contenere qualsiasi combinazione di valori dall'insieme identificato sul lato sinistro dell'operatore Join e dall'insieme identificato 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ù insiemi in un unico insieme.
È possibile eseguire un join implicito per unire insiemi 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ù insiemi in un unico insieme gerarchico. 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 uniti due insiemi 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), Windows Explorer
cmd (5136), Command Window
Nell'esempio di codice seguente viene illustrato come unire due insiemi 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), Windows Explorer, Priority = 8
Vedere anche
Concetti
Introduzione a LINQ in Visual Basic
Riferimenti
Clausola Select (Visual Basic)
Clausola Group Join (Visual Basic)