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