Join Tümcesi (Visual Basic)
İki koleksiyonu tek bir koleksiyonda birleştirir. Birleştirme işlemi eşleşen anahtarları temel alır ve işlecini Equals
kullanır.
Sözdizimi
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
Parça
element
Gerekli. Birleştirilen koleksiyonun denetim değişkeni.
collection
Gerekli. İşlecin sol tarafında Join
tanımlanan koleksiyonla birleştirilen koleksiyon. Yan Join
tümcesi başka bir Join
yan tümcede veya yan Group Join
tümcesinde iç içe yerleştirilebilir.
joinClause
isteğe bağlı. Sorguyu daha da daraltmak için bir veya daha fazla Join
ek yan tümce.
groupJoinClause
isteğe bağlı. Sorguyu daha da daraltmak için bir veya daha fazla Group Join
ek yan tümce.
key1
Equals
key2
Gerekli. Birleştirilmekte olan koleksiyonların anahtarlarını tanımlar. Birleştirilmekte olan Equals
koleksiyonların anahtarlarını karşılaştırmak için işlecini kullanmanız gerekir. Birden çok anahtarı tanımlamak için işlecini And
kullanarak birleştirme koşullarını birleştirebilirsiniz. key1
işlecin sol tarafındaki Join
koleksiyondan olmalıdır. key2
işlecin sağ tarafındaki Join
koleksiyondan olmalıdır.
Birleştirme koşulunda kullanılan anahtarlar, koleksiyondan birden fazla öğe içeren ifadeler olabilir. Ancak, her anahtar ifadesi yalnızca ilgili koleksiyonundaki öğeleri içerebilir.
Açıklamalar
yan tümcesi Join
, birleştirilmekte olan koleksiyonlardaki eşleşen anahtar değerlerine göre iki koleksiyonu birleştirir. Sonuçta elde edilen koleksiyon, işlecin sol tarafında tanımlanan koleksiyondaki değerlerin Join
herhangi bir bileşimini ve yan tümcesinde Join
tanımlanan koleksiyonu içerebilir. Sorgu yalnızca işleç tarafından belirtilen koşulun Equals
karşılandığı sonuçları döndürür. Bu, SQL'deki ile INNER JOIN
eşdeğerdir.
İki veya daha fazla koleksiyonu tek bir koleksiyonda birleştirmek için sorguda birden çok Join
yan tümce kullanabilirsiniz.
Yan tümcesi olmadan Join
koleksiyonları birleştirmek için örtük birleştirme gerçekleştirebilirsiniz. Bunu yapmak için yan tümcenize From
birden çok In
yan tümce ekleyin ve birleşim için kullanmak istediğiniz anahtarları tanımlayan bir Where
yan tümce belirtin.
Yan tümcesini Group Join
kullanarak koleksiyonları tek bir hiyerarşik koleksiyonda birleştirebilirsiniz. Bu, SQL'deki gibi.LEFT OUTER JOIN
Örnek 1
Aşağıdaki kod örneği, bir müşteri listesini siparişleriyle birleştirmek için örtük bir birleşim gerçekleştirir.
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
Örnek 2
Aşağıdaki kod örneği yan tümcesini kullanarak iki koleksiyonu birleştirir Join
.
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
Bu örnek aşağıdakine benzer bir çıkış oluşturur:
winlogon (968), Windows Logon
explorer (2424), File Explorer
cmd (5136), Command Window
Örnek 3
Aşağıdaki kod örneği, yan tümcesini Join
iki anahtar sütunuyla kullanarak iki koleksiyonu birleştirir.
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
Örnek aşağıdakine benzer bir çıkış oluşturur:
winlogon (968), Windows Logon, Priority = 13
cmd (700), Command Window, Priority = 8
explorer (2424), File Explorer, Priority = 8