Kopplingssats (Visual Basic)
Kombinerar två samlingar till en enda samling. Kopplingsåtgärden baseras på matchande nycklar och använder operatorn Equals
.
Syntax
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
Delar
element
Krävs. Kontrollvariabeln för samlingen som ansluts.
collection
Obligatoriskt. Samlingen som ska kombineras med samlingen som identifieras till vänster om operatorn Join
. En Join
sats kan kapslas i en annan Join
sats eller i en Group Join
-sats.
joinClause
Valfritt. En eller flera ytterligare Join
satser för att ytterligare förfina frågan.
groupJoinClause
Valfritt. En eller flera ytterligare Group Join
satser för att ytterligare förfina frågan.
key1
Equals
key2
Obligatoriskt. Identifierar nycklar för de samlingar som ansluts. Du måste använda operatorn Equals
för att jämföra nycklar från de samlingar som är anslutna. Du kan kombinera kopplingsvillkor med hjälp av operatorn And
för att identifiera flera nycklar. key1
måste vara från samlingen till vänster om operatorn Join
. key2
måste vara från samlingen till höger om operatorn Join
.
Nycklarna som används i kopplingsvillkoret kan vara uttryck som innehåller fler än ett objekt från samlingen. Varje nyckeluttryck kan dock bara innehålla objekt från respektive samling.
Kommentarer
- Join
satsen kombinerar två samlingar baserat på matchande nyckelvärden från samlingarna som kopplas. Den resulterande samlingen kan innehålla valfri kombination av värden från samlingen som identifieras till vänster om operatorn Join
och samlingen som identifieras i Join
-satsen. Frågan returnerar endast resultat som villkoret som anges av operatorn Equals
uppfylls för. Detta motsvarar en INNER JOIN
i SQL.
Du kan använda flera Join
satser i en fråga för att ansluta två eller flera samlingar till en enda samling.
Du kan utföra en implicit koppling för att kombinera samlingar utan Join
-satsen. Det gör du genom att inkludera flera In
satser i From
satsen och ange en Where
sats som identifierar de nycklar som du vill använda för kopplingen.
Du kan använda Group Join
-satsen för att kombinera samlingar till en enda hierarkisk samling. Det här är som en LEFT OUTER JOIN
i SQL.
Exempel 1
I följande kodexempel utförs en implicit koppling för att kombinera en lista över kunder med deras beställningar.
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
Exempel 2
I följande kodexempel kopplas två samlingar med hjälp Join
av -satsen.
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
Det här exemplet ger utdata som liknar följande:
winlogon (968), Windows Logon
explorer (2424), File Explorer
cmd (5136), Command Window
Exempel 3
I följande kodexempel kopplas två samlingar med hjälp Join
av -satsen med två nyckelkolumner.
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
Exemplet ger utdata som liknar följande:
winlogon (968), Windows Logon, Priority = 13
cmd (700), Command Window, Priority = 8
explorer (2424), File Explorer, Priority = 8