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

Ayrıca bkz.