Join-component (Visual Basic)
Combineert twee verzamelingen in één verzameling. De join-bewerking is gebaseerd op overeenkomende sleutels en maakt gebruik van de Equals
operator.
Syntaxis
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
generator
element
Vereist. De besturingsvariabele voor de verzameling die wordt toegevoegd.
collection
Vereist. De verzameling die moet worden gecombineerd met de verzameling die aan de linkerkant van de Join
operator is geïdentificeerd. Een Join
component kan worden genest in een andere Join
component of in een Group Join
component.
joinClause
Optioneel. Een of meer aanvullende Join
componenten om de query verder te verfijnen.
groupJoinClause
Optioneel. Een of meer aanvullende Group Join
componenten om de query verder te verfijnen.
key1
Equals
key2
Vereist. Identificeert sleutels voor de verzamelingen die worden gekoppeld. U moet de Equals
operator gebruiken om sleutels te vergelijken van de verzamelingen die worden gekoppeld. U kunt joinvoorwaarden combineren met behulp van de And
operator om meerdere sleutels te identificeren. key1
moet afkomstig zijn uit de verzameling aan de linkerkant van de Join
operator. key2
moet afkomstig zijn uit de verzameling aan de rechterkant van de Join
operator.
De sleutels die in de joinvoorwaarde worden gebruikt, kunnen expressies zijn die meer dan één item uit de verzameling bevatten. Elke sleutelexpressie kan echter alleen items uit de respectieve verzameling bevatten.
Opmerkingen
De Join
component combineert twee verzamelingen op basis van overeenkomende sleutelwaarden van de verzamelingen die worden gekoppeld. De resulterende verzameling kan elke combinatie van waarden uit de verzameling bevatten die aan de linkerkant van de Join
operator is geïdentificeerd en de verzameling die in de Join
component is geïdentificeerd. De query retourneert alleen resultaten waarvoor aan de voorwaarde is voldaan die is opgegeven door de Equals
operator. Dit komt overeen met een INNER JOIN
in SQL.
U kunt meerdere Join
componenten in een query gebruiken om twee of meer verzamelingen aan één verzameling toe te voegen.
U kunt een impliciete join uitvoeren om verzamelingen te combineren zonder de Join
component. U doet dit door meerdere In
componenten in uw From
component op te nemen en een Where
component op te geven die de sleutels identificeert die u voor de join wilt gebruiken.
U kunt de Group Join
component gebruiken om verzamelingen te combineren in één hiërarchische verzameling. Dit is als een LEFT OUTER JOIN
in SQL.
Voorbeeld 1
In het volgende codevoorbeeld wordt een impliciete join uitgevoerd om een lijst met klanten met hun orders te combineren.
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
Voorbeeld 2
In het volgende codevoorbeeld worden twee verzamelingen samengevoegd met behulp van de Join
component.
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
In dit voorbeeld wordt uitvoer geproduceerd die vergelijkbaar is met de volgende:
winlogon (968), Windows Logon
explorer (2424), File Explorer
cmd (5136), Command Window
Voorbeeld 3
In het volgende codevoorbeeld worden twee verzamelingen samengevoegd met behulp van de Join
component met twee sleutelkolommen.
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
In het voorbeeld wordt uitvoer geproduceerd die vergelijkbaar is met de volgende:
winlogon (968), Windows Logon, Priority = 13
cmd (700), Command Window, Priority = 8
explorer (2424), File Explorer, Priority = 8