Join 절(Visual Basic)
두 개의 컬렉션을 단일 컬렉션으로 결합합니다. 조인 연산은 일치하는 키를 기준으로 하며 Equals 연산자를 사용합니다.
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
구성 요소
element
필수적 요소로서, 조인된 컬렉션의 제어 변수입니다.collection
필수적 요소로서, Join 연산자의 왼쪽에서 식별된 컬렉션과 결합할 컬렉션입니다. Join 절은 다른 Join 절이나 Group Join 절에서 중첩될 수 있습니다.joinClause
선택적 요소로서, 쿼리 조건을 더 구체화하기 위한 하나 이상의 추가 Join 절입니다.groupJoinClause
선택적 요소로서, 쿼리 조건을 더 구체화하기 위한 하나 이상의 추가 Group Join 절입니다.key1Equalskey2
필수적 요소로서, 조인된 컬렉션의 키를 식별합니다. 조인된 컬렉션에서 키를 비교하려면 Equals 연산자를 사용해야 합니다. And 연산자를 사용하여 조인 조건을 결합함으로써 여러 개의 키를 식별할 수 있습니다. key1은 Join 연산자의 왼쪽에 있는 컬렉션에서 가져와야 합니다. key2은 Join 연산자의 오른쪽에 있는 컬렉션에서 가져와야 합니다.조인 조건에 사용되는 키는 컬렉션에서 두 개 이상의 항목을 포함하는 식일 수 있습니다. 하지만 각 키 식에는 해당 컬렉션의 항목만 포함할 수 있습니다.
설명
Join 절은 조인된 컬렉션의 일치하는 키 값을 기준으로 두 개의 컬렉션을 결합합니다. 결과 컬렉션에는 Join 연산자의 왼쪽에서 식별된 컬렉션과 Join 절에서 식별된 컬렉션에서 가져온 값의 결합이 포함될 수 있습니다. 쿼리는 Equals 연산자에 의해 지정된 조건을 충족하는 결과만 반환합니다. 이는 SQL의 INNER JOIN과 같습니다.
한 쿼리에서 여러 Join 절을 사용하여 두 개 이상의 컬렉션을 단일 컬렉션으로 조인할 수 있습니다.
Join 절을 사용하지 않고 암시적 조인을 수행하여 컬렉션을 결합할 수 있습니다. 이를 수행하려면 여러 In 절을 From 절에 포함시키고 조인에 사용할 키를 식별하는 Where 절을 지정합니다.
Group Join 절을 사용하여 컬렉션을 단일 계층적 컬렉션으로 결합할 수 있습니다. 이는 SQL의 LEFT OUTER JOIN과 유사합니다.
예제
다음 코드 예제에서는 암시적 조인을 수행하여 주문이 있는 고객의 목록을 결합합니다.
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
다음 코드 예제에서는 Join 절을 사용하여 두 개의 컬렉션을 조인합니다.
Imports System.Diagnostics
Imports System.Security.Permissions
Public Class JoinSample
<SecurityPermission(SecurityAction.Demand)>
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
이 예제는 다음과 유사한 출력을 생성합니다.
winlogon (968), Windows Logon
explorer (2424), Windows Explorer
cmd (5136), Command Window
다음 코드 예제에서는 두 개의 키 열과 함께 Join 절을 사용하여 두 개의 컬렉션을 조인합니다.
Imports System.Diagnostics
Imports System.Security.Permissions
Public Class JoinSample2
<SecurityPermission(SecurityAction.Demand)>
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
이 예제는 다음과 유사한 출력을 생성합니다.
winlogon (968), Windows Logon, Priority = 13
cmd (700), Command Window, Priority = 8
explorer (2424), Windows Explorer, Priority = 8