Dołącz klauzulę (Visual Basic)
Łączy dwie kolekcje do pojedynczego kolekcji.Operacja join opiera się na pasujące klucze i używa Equals operatora.
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
Części
element
Wymagane.Zmienna kontrolna dla kolekcji jest przyłączony.collection
Wymagane.Kolekcja połączyć się ze zbioru, identyfikowane po lewej stronie Join operatora.A Join klauzuli można zagnieździć w innym Join klauzuli, lub w Group Join klauzuli.joinClause
Opcjonalne.Jeden lub więcej dodatkowych Join klauzul dalsze uściślenie kwerendy.groupJoinClause
Opcjonalne.Jeden lub więcej dodatkowych Group Join klauzul dalsze uściślenie kwerendy.key1Equalskey2
Wymagane.Identyfikuje kluczy kolekcji jest przyłączony.Należy użyć Equals operatora porównania kluczy z kolekcji jest przyłączony.Warunki sprzężenia można połączyć za pomocą And operatora do identyfikowania wielu kluczy.key1musi być z kolekcji po lewej stronie Join operatora.key2musi być z kolekcji po prawej stronie Join operatora.Klawisze używane w warunku sprzężenia może być wyrażeń, które zawierają więcej niż jeden element z kolekcji.Każde wyrażenie klucza może jednak zawierać tylko elementy z jej odpowiednimi kolekcji.
Uwagi
Join Klauzuli łączy dwie kolekcje oparte na dopasowanie wartości klucza z kolekcji jest przyłączony.Kolekcja wynikowy może zawierać dowolną kombinację wartości ze zbioru, identyfikowane po lewej stronie Join operatora i kolekcji w Join klauzuli.Kwerenda będzie zwracać tylko wyniki dla których warunek określony przez Equals operator jest spełniony.Jest to równoważne INNER JOIN w języku SQL.
Można użyć wielu Join klauzule kwerendy do dwóch lub więcej zbiorów do pojedynczego kolekcji.
Można wykonać sprzężenie niejawna połączyć kolekcje bez Join klauzuli.Aby to zrobić, należy dołączyć wiele In klauzule na From klauzuli i określić Where klauzuli, która identyfikuje klucze, które chcesz użyć dla sprzężenia.
Można użyć Group Join klauzuli połączyć kolekcji do pojedynczego hierarchicznej kolekcji.Przypomina to LEFT OUTER JOIN w języku SQL.
Przykład
Poniższy przykład kodu wykonuje sprzężenie niejawna połączyć listę klientów z ich zamówień.
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
Poniższy przykład kodu łączy dwie kolekcje za pomocą Join klauzuli.
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
W tym przykładzie da dane wyjściowe podobne do następujących:
winlogon (968), Windows Logon
explorer (2424), File Explorer
cmd (5136), Command Window
Poniższy przykład kodu łączy dwie kolekcje za pomocą Join klauzuli z dwiema kolumnami klucza.
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
Przykład da 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ż
Informacje
Wybierz klauzuli (Visual Basic)
Klauzula sprzężenia grupy (Visual Basic)
Koncepcje
Wprowadzenie do LINQ w języku Visual Basic