Csatlakozási záradék (Visual Basic)

Két gyűjteményt egyesít egyetlen gyűjteménybe. Az illesztési művelet egyező kulcsokon alapul, és az operátort Equals használja.

Syntax

Join element In collection _
  [ joinClause _ ]
  [ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]

Részek

element Szükséges. Az összekapcsolt gyűjtemény vezérlőváltozója.

collection
Szükséges. Az operátor bal oldalán Join azonosított gyűjteményrel kombinálandó gyűjtemény. A Join záradékok beágyazhatók egy másik Join záradékba vagy egy Group Join záradékba.

joinClause
Opcionális. Egy vagy több további Join záradék a lekérdezés további finomításához.

groupJoinClause
Opcionális. Egy vagy több további Group Join záradék a lekérdezés további finomításához.

key1 Equals key2
Szükséges. Azonosítja az összekapcsolt gyűjtemények kulcsait. Az operátorral Equals össze kell hasonlítania a csatlakoztatott gyűjtemények kulcsait. Összekapcsolási feltételeket kombinálhat az And operátorral több kulcs azonosításához. key1 az operátor bal oldalán található gyűjteményből kell származnia Join . key2 az operátor jobb oldalán található gyűjteményből kell származnia Join .

Az illesztési feltételben használt kulcsok olyan kifejezések lehetnek, amelyek egynél több elemet tartalmaznak a gyűjteményből. Az egyes kulcskifejezések azonban csak a saját gyűjteményéből származó elemeket tartalmazhatnak.

Megjegyzések

A Join záradék két gyűjteményt egyesít az összekapcsolt gyűjtemények kulcsértékeinek megfelelő alapján. Az eredményként kapott gyűjtemény az operátor bal oldalán Join azonosított gyűjtemény és a záradékban Join azonosított gyűjtemény értékeinek bármilyen kombinációját tartalmazhatja. A lekérdezés csak azokat az eredményeket adja vissza, amelyek esetében az Equals operátor által megadott feltétel teljesül. Ez egyenértékű az INNER JOIN SQL-ben.

Egy lekérdezésben több Join záradékot is használhat két vagy több gyűjtemény egyetlen gyűjteményhez való csatlakoztatásához.

Implicit illesztést is végrehajthat a gyűjtemények záradék nélküli Join egyesítése érdekében. Ehhez vegyen fel több In záradékot a From záradékba, és adjon meg egy záradékot Where , amely azonosítja az illesztéshez használni kívánt kulcsokat.

A Group Join záradék használatával a gyűjtemények egyetlen hierarchikus gyűjteménybe egyesíthetők. Ez olyan, mint egy LEFT OUTER JOIN SQL-ben.

1. példa

Az alábbi példakód implicit illesztéssel kombinálja az ügyfelek listáját a rendelésekkel.

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

2. példa

Az alábbi példakód két gyűjteményt illeszt össze a Join záradék használatával.

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

Ez a példa a következőhöz hasonló kimenetet eredményez:

winlogon (968), Windows Logon

explorer (2424), File Explorer

cmd (5136), Command Window

3. példa

Az alábbi példakód két gyűjteményt illeszt össze a záradék és két Join kulcsoszlop használatával.

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

A példa a következőhöz hasonló kimenetet hoz létre:

winlogon (968), Windows Logon, Priority = 13

cmd (700), Command Window, Priority = 8

explorer (2424), File Explorer, Priority = 8

Lásd még