Freigeben über


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 [... ]

Teile

  • 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
    Dies ist optional. Eine oder mehrere zusätzliche Join-Klauseln, um die Abfrage weiter zu verfeinern.

  • groupJoinClause
    Dies ist optional. Eine oder mehrere zusätzliche Group Join-Klauseln, um die Abfrage weiter zu verfeinern.

  • key1 Equals key2
    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), File 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), File Explorer, Priority = 8

Siehe auch

Referenz

Select-Klausel (Visual Basic)

From-Klausel (Visual Basic)

Group Join-Klausel (Visual Basic)

Where-Klausel (Visual Basic)

Konzepte

Einführung in LINQ in Visual Basic

Weitere Ressourcen

Abfragen (Visual Basic)