Join-Klausel (Visual Basic)
Aktualisiert: November 2007
Fasst zwei Auflistungen zu einer einzelnen Auflistung zusammen. Die Verknüpfungsoperation basiert auf übereinstimmenden Schlüsseln und verwendet den Equals-Operator.
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
Bestandteile
element
Erforderlich. Die Steuerelementvariable für die zu verknüpfende Auflistung.collection
Erforderlich. Die Auflistung, die mit der Auflistung auf der linken Seite des Join-Operators verknüpft werden soll. Eine Join-Klausel kann in einer weiteren Join-Klausel oder einer Group Join-Klausel geschachtelt werden.joinClause
Optional. Eine oder mehrere zusätzliche Join-Klauseln, um die Abfrage weiter zu verfeinern.groupJoinClause
Optional. Eine oder mehrere zusätzliche Group Join-Klauseln, um die Abfrage weiter zu verfeinern.key1Equalskey2
Erforderlich. Identifiziert Schlüssel für die zu verknüpfenden Auflistungen. Mit dem Equals-Operator müssen Sie Schlüssel der zu verknüpfenden Auflistungen vergleichen. Mithilfe des And-Operators können Sie Verknüpfungsbedingungen kombinieren, um mehrere Schlüssel festzulegen. key1 muss aus der Auflistung auf der linken Seite des Join-Operators stammen. key2 muss aus der Auflistung auf der rechten Seite des Join-Operators stammen.Die in der Verknüpfungsbedingung verwendeten Schlüssel können Ausdrücke sein, die mehrere Elemente der Auflistung enthalten. Jeder Schlüsselausdruck kann jedoch nur Elemente seiner zugehörigen Auflistung enthalten.
Hinweise
Durch die Join-Klausel werden zwei Auflistungen auf Grundlage der übereinstimmenden Schlüsselwerte der zu verknüpfenden Auflistungen kombiniert. Die entstehende Auflistung kann jede Kombination von Werten aus der auf der linken Seite des Join-Operators angegebenen Auflistung und der in der Join-Klausel angegebenen Auflistung enthalten. Die Abfrage gibt nur Ergebnisse zurück, die die vom Equals-Operator angegebene Bedingung erfüllen. Dies entspricht einem INNER JOIN in SQL.
In einer Abfrage können mehrere Join-Klauseln verwendet werden, um zwei oder mehrere Auflistungen zu einer einzelnen Auflistung zu verknüpfen.
Sie können eine implizite Verknüpfung ausführen, um Auflistungen ohne die Join-Klausel zu kombinieren. Nehmen Sie hierfür mehrere In-Klauseln in die From-Klausel auf, und geben Sie eine Where-Klausel an, in der die für die Verknüpfung zu verwendenden Schlüssel angegeben werden.
Mit der Group Join-Klausel können Sie mehrere Auflistungen in einer einzelnen hierarchischen Auflistung kombinieren. Dies entspricht einem LEFT OUTER JOIN in SQL.
Beispiel
Im folgenden Codebeispiel wird eine implizite Verknüpfung ausgeführt, um eine Liste von Kunden mit ihren Bestellungen zu kombinieren.
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
Im folgenden Codebeispiel werden mit der Join-Klausel zwei Auflistungen miteinander verknüpft.
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
Die in diesem Beispiel erzeugte Ausgabe sieht in etwa folgendermaßen aus:
winlogon (968), Windows Logon
explorer (2424), Windows Explorer
cmd (5136), Command Window
Im folgenden Codebeispiel werden durch Verwendung der Join-Klausel mit zwei Schlüsselspalten zwei Auflistungen miteinander verknüpft.
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
Die im Beispiel erzeugte Ausgabe sieht in etwa folgendermaßen aus:
winlogon (968), Windows Logon, Priority = 13
cmd (700), Command Window, Priority = 8
explorer (2424), Windows Explorer, Priority = 8
Siehe auch
Konzepte
Einführung in LINQ in Visual Basic
Referenz
Group Join-Klausel (Visual Basic)