Freigeben über


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

Select-Klausel (Visual Basic)

From-Klausel (Visual Basic)

Group Join-Klausel (Visual Basic)

Where-Klausel (Visual Basic)

Weitere Ressourcen

Abfragen (Visual Basic)