Join, clause (Visual Basic)
Combine deux collections en une collection unique. L’opération de jointure est basée sur des clés correspondantes et utilise l’opérateur Equals
.
Syntaxe
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
Éléments
element
Obligatoire. La variable de contrôle pour la collection en cours de jointure.
collection
Obligatoire. La collection à combiner avec la collection identifiée sur le côté gauche de l’opérateur Join
. Une clause Join
peut être imbriquée dans une autre clause Join
ou dans une clause Group Join
.
joinClause
Optionnel. Une ou plusieurs clauses Join
supplémentaires pour affiner davantage la requête.
groupJoinClause
Optionnel. Une ou plusieurs clauses Group Join
supplémentaires pour affiner davantage la requête.
key1
Equals
key2
Obligatoire. Identifie les clés pour les collections en cours de jointure. Vous devez utiliser l’opérateur Equals
pour comparer les clés des collections en cours de jointure. Vous pouvez combiner des conditions de jointure à l’aide de l’opérateur And
pour identifier plusieurs clés. key1
doit provenir de la collection sur le côté gauche de Join
l’opérateur. key2
doit provenir de la collection sur le côté droit de Join
l’opérateur.
Les clés utilisées dans la condition de jointure peuvent être des expressions qui incluent plus d’un élément de la collection. Toutefois, chaque expression clé ne peut contenir que des éléments de sa collection respective.
Notes
La clause Join
combine deux collections en fonction des valeurs de clé correspondantes des collections jointes. La collection résultante peut contenir n’importe quelle combinaison de valeurs de la collection identifiée sur le côté gauche de l’opérateur Join
et de la collection identifiée dans la clause Join
. La requête retourne uniquement les résultats pour lesquels la condition spécifiée par l’opérateur Equals
est remplie. Cela est équivalent à un INNER JOIN
dans SQL.
Vous pouvez utiliser plusieurs clauses Join
dans une requête pour joindre deux collections ou plus en une seule collection.
Vous pouvez effectuer une jointure implicite pour combiner des collections sans la clause Join
. Pour ce faire, incluez plusieurs clauses In
dans votre clause From
et spécifiez une clause Where
qui identifie les clés que vous souhaitez utiliser pour la jointure.
Vous pouvez utiliser la clause Group Join
pour combiner des collections en une seule collection hiérarchique. On peut comparer cela à un LEFT OUTER JOIN
dans SQL.
Exemple 1
L’exemple de code suivant effectue une jointure implicite pour combiner une liste de clients avec leurs commandes.
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
Exemple 2
L’exemple de code suivant joint deux collections à l’aide de la clause Join
.
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
L’exemple produit par cette commande est semblable à ce qui suit :
winlogon (968), Windows Logon
explorer (2424), File Explorer
cmd (5136), Command Window
Exemple 3
L’exemple de code suivant joint deux collections à l’aide de la clause Join
avec deux colonnes clés.
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
L’exemple produit par cette commande est semblable à ce qui suit :
winlogon (968), Windows Logon, Priority = 13
cmd (700), Command Window, Priority = 8
explorer (2424), File Explorer, Priority = 8