Join — Klauzula (Visual Basic)

Łączy dwie kolekcje w jedną kolekcję. Operacja sprzężenia jest oparta na pasujących kluczach i używa Equals operatora .

Składnia

Join element In collection _
  [ joinClause _ ]
  [ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]

generatora

element Wymagane. Zmienna sterowa dla dołączanej kolekcji.

collection
Wymagany. Kolekcja do połączenia z kolekcją zidentyfikowaną po lewej stronie Join operatora. Klauzula Join może być zagnieżdżona w innej Join klauzuli lub klauzuli Group Join .

joinClause
Opcjonalny. Co najmniej jedna dodatkowa Join klauzula w celu dalszego uściślenia zapytania.

groupJoinClause
Opcjonalny. Co najmniej jedna dodatkowa Group Join klauzula w celu dalszego uściślenia zapytania.

key1 Equals key2
Wymagany. Identyfikuje klucze dla sprzężonych kolekcji. Aby porównać klucze ze sprzężonych kolekcji, należy użyć Equals operatora . Warunki sprzężenia można połączyć za pomocą operatora , And aby zidentyfikować wiele kluczy. key1 musi pochodzić z kolekcji po lewej stronie Join operatora. key2 musi pochodzić z kolekcji po prawej stronie Join operatora.

Klucze używane w warunku sprzężenia mogą być wyrażeniami, które zawierają więcej niż jeden element z kolekcji. Jednak każde wyrażenie klucza może zawierać tylko elementy z odpowiedniej kolekcji.

Uwagi

Klauzula Join łączy dwie kolekcje w oparciu o pasujące wartości klucza z połączonych kolekcji. Wynikowa kolekcja może zawierać dowolną kombinację wartości z kolekcji zidentyfikowanej po lewej stronie Join operatora i kolekcji zidentyfikowanej w klauzuli Join . Zapytanie zwróci tylko wyniki, dla których spełniony jest warunek określony przez Equals operator. Jest to odpowiednik elementu INNER JOIN w języku SQL.

W zapytaniu można użyć wielu Join klauzul, aby połączyć co najmniej dwie kolekcje w jedną kolekcję.

Możesz wykonać niejawne sprzężenie, aby połączyć kolekcje bez klauzuli Join . W tym celu należy uwzględnić wiele In klauzul w From klauzuli i określić klauzulę identyfikującą Where klucze, których chcesz użyć dla sprzężenia.

Możesz użyć klauzuli Group Join , aby połączyć kolekcje w jedną hierarchiczną kolekcję. Jest to jak LEFT OUTER JOIN w języku SQL.

Przykład 1

Poniższy przykład kodu wykonuje niejawne sprzężenie, aby połączyć listę klientów z ich zamówieniami.

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

Przykład 2

Poniższy przykład kodu łączy dwie kolekcje przy użyciu klauzuli 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

W tym przykładzie zostaną wyświetlone dane wyjściowe podobne do następujących:

winlogon (968), Windows Logon

explorer (2424), File Explorer

cmd (5136), Command Window

Przykład 3

Poniższy przykład kodu łączy dwie kolekcje przy użyciu klauzuli Join z dwiema kolumnami klucza.

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

W przykładzie zostaną wyświetlone dane wyjściowe podobne do następujących:

winlogon (968), Windows Logon, Priority = 13

cmd (700), Command Window, Priority = 8

explorer (2424), File Explorer, Priority = 8

Zobacz też