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