Share via


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

Zie ook