Join-Klausel (Visual Basic)
Fasst zwei Auflistungen zu einer einzelnen Auflistung zusammen. Die Joinoperation basiert auf übereinstimmenden Schlüsseln und verwendet den Operator Equals.
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 Operators Join 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 Operator Equals müssen Sie Schlüssel der zu verknüpfenden Auflistungen vergleichen. Sie können Joinbedingungen kombinieren, indem Sie mit dem Operator And mehrere Schlüssel identifizieren. key1 muss aus der Auflistung auf der linken Seite des Operators Join stammen. key2 muss aus der Auflistung auf der rechten Seite des Operators Join stammen.Die in der Joinbedingung 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 Operators Join angegebenen Auflistung und der in der Join-Klausel angegebenen Auflistung enthalten. Die Abfrage gibt nur Ergebnisse zurück, die die vom Operator Equals 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 einen impliziten Join 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 den Join 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 ein impliziter Join 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
Referenz
Group Join-Klausel (Visual Basic)
Konzepte
Einführung in LINQ in Visual Basic