Aracılığıyla paylaş


Nasıl yapılır: birleşimler (Visual Basic) kullanarak verileri LINQ ile birleştirmek

Visual Basic sağlar Join ve Group Join Koleksiyonlar arasında ortak değerlere göre birden çok koleksiyon içeriğini birleştirmek etkinleştirmek için yan tümcelerini sorgu.Bu değerler olarak bilinen anahtar değerler.Geliştiricilerin ilişkisel veritabanı kavramları ile tanıdık algılayacağı Join olarak bir INNER JOIN yan tümcesi ve Group Join olarak, etkili bir şekilde bir left outer JOIN yan tümcesi.

Bu konudaki örnekleri kullanarak verileri birleştirmek için birkaç yol göstermek Join ve Group Join yan tümcelerini sorgu.

Bir proje oluşturmak ve örnek veri ekleme

Örnek verileri ve türlerini içeren bir proje oluşturmak için

  1. Bu konudaki örnekleri çalıştırmak için Visual Studio açın ve yeni bir Visual Basic Console Application proje ekleyin.Visual Basic tarafından oluşturulan Module1.vb dosyasını çift tıklatın.

  2. Bu konuda kullanım örnekleri Person ve Pet türleri ve veri aşağıdaki kod örneği.Varsayılan bu kodu kopyalayıp Module1 Visual Basic tarafından oluşturulan modül.

    Private _people As List(Of Person)
    Private _pets As List(Of Pet)
    
    Function GetPeople() As List(Of Person)
        If _people Is Nothing Then CreateLists()
        Return _people
    End Function
    
    Function GetPets(ByVal people As List(Of Person)) As List(Of Pet)
        If _pets Is Nothing Then CreateLists()
        Return _pets
    End Function
    
    Private Sub CreateLists()
        Dim pers As Person
    
        _people = New List(Of Person)
        _pets = New List(Of Pet)
    
        pers = New Person With {.FirstName = "Magnus", .LastName = "Hedlund"}
        _people.Add(pers)
        _pets.Add(New Pet With {.Name = "Daisy", .Owner = pers})
    
        pers = New Person With {.FirstName = "Terry", .LastName = "Adams"}
        _people.Add(pers)
        _pets.Add(New Pet With {.Name = "Barley", .Owner = pers})
        _pets.Add(New Pet With {.Name = "Boots", .Owner = pers})
        _pets.Add(New Pet With {.Name = "Blue Moon", .Owner = pers})
    
        pers = New Person With {.FirstName = "Charlotte", .LastName = "Weiss"}
        _people.Add(pers)
        _pets.Add(New Pet With {.Name = "Whiskers", .Owner = pers})
    
        ' Add a person with no pets for the sake of Join examples.
        _people.Add(New Person With {.FirstName = "Arlene", .LastName = "Huff"})
    
        pers = New Person With {.FirstName = "Don", .LastName = "Hall"}
        ' Do not add person to people list for the sake of Join examples.
        _pets.Add(New Pet With {.Name = "Spot", .Owner = pers})
    
        ' Add a pet with no owner for the sake of Join examples.
        _pets.Add(New Pet With {.Name = "Unknown", 
                                .Owner = New Person With {.FirstName = String.Empty, 
                                                          .LastName = String.Empty}})
    End Sub
    
    
    ...
    
    
    Class Person
        Public Property FirstName As String
        Public Property LastName As String
    End Class
    
    Class Pet
        Public Property Name As String
        Public Property Owner As Person
    End Class
    

Birleştirme yan tümcesi kullanarak bir iç birleşim gerçekleştirmek

INNER JOIN işleminde iki koleksiyon verileri birleştirir.Belirtilen anahtar değerleri için eşleşen öğeler eklenir.Eşleşen bir öğe diğer koleksiyonunda olmayan herhangi bir ya da koleksiyon öğeleri dışarıda bırakılır.

Visual Basic'te, LINQ bir iç birleşim gerçekleştirmek için iki seçenek sunar: örtülü bir birleşim ve açık bir birleşim.

Örtülü bir birleşim katılması için Koleksiyonlar belirtir bir From yan tümcesi ve eşleşen anahtar alanları tanımlayan bir Where yan tümcesi.Visual Basic anahtar belirtilen alanlara dayanarak iki topluluk örtülü olarak katılır.

Açık bir birleştirme kullanarak belirtmek Join birleştirme kullanmak için hangi tuşa alanlar belirli olmasını istediğinizde yan tümcesi.Bu durumda, bir Where yan tümcesi hala sorgu sonuçlarını süzmek için kullanılabilir.

INNER JOIN JOIN yan tümcesi kullanarak gerçekleştirmek için

  • Aşağıdaki kodu ekleyip Module1 her iki implicit ya da explicit iç birleşim örneklerini görmek için Proje modülünde.

    Sub InnerJoinExample()
        ' Create two lists.
        Dim people = GetPeople()
        Dim pets = GetPets(people)
    
        ' Implicit Join.
        Dim petOwners = From pers In people, pet In pets
                        Where pet.Owner Is pers
                        Select pers.FirstName, PetName = pet.Name
    
        ' Display grouped results.
        Dim output As New System.Text.StringBuilder
        For Each pers In petOwners
            output.AppendFormat(
              pers.FirstName & ":" & vbTab & pers.PetName & vbCrLf)
        Next
    
        Console.WriteLine(output)
    
        ' Explicit Join.
        Dim petOwnersJoin = From pers In people
                            Join pet In pets
                            On pet.Owner Equals pers
                            Select pers.FirstName, PetName = pet.Name
    
        ' Display grouped results.
        output = New System.Text.StringBuilder()
        For Each pers In petOwnersJoin
            output.AppendFormat(
              pers.FirstName & ":" & vbTab & pers.PetName & vbCrLf)
        Next
    
        Console.WriteLine(output)
    
        ' Both queries produce the following output:
        '
        ' Magnus:    Daisy
        ' Terry:     Barley
        ' Terry:     Boots
        ' Terry:     Blue Moon
        ' Charlotte: Whiskers
    End Sub
    

Bir sol dış birleşim Grup JOIN yan tümcesi kullanarak gerçekleştirmek

Sol taraftaki koleksiyonundan tüm öğelerin birleşim ve yalnızca eşleşen değerleri birleştirme işleminin sağ tarafındaki koleksiyonundan bir left outer JOIN içerir.Eşleşen öğe sol taraftaki koleksiyonunda bulunmayan öğeler birleştirme işleminin sağ tarafındaki koleksiyonundan sorgu sonucu dışarıda bırakılır.

Group Join Yan tümcesi gerçekleştirir, yani left outer JOIN.left outer JOIN tipik olarak bilinen ve ne arasındaki fark Group Join yan tümcesini verir, iş Group Join yan grupları sonuçları sol taraftaki koleksiyonundaki her öğe için birleştirme işleminin sağ tarafındaki koleksiyonundan.İlişkisel bir veritabanında, her öğe sorgu sonuç grubu çözülmüş bir sonuç her iki birleştirme koleksiyonları eşleşen öğeleri içeren bir left outer JOIN döndürür.Bu durumda, birleştirme işleminin sol taraftaki koleksiyonundan öğeleri sağdaki koleksiyonundan eşleşen her öğe için yinelenir.Sonraki yordamı tamamladığınızda bu gibi göründüğünü göreceksiniz.

Sonuçları alabilir bir Group Join sorgu sorgunuzu her Gruplandırılmış sorgu sonucu için bir öğeyi döndürmek için genişletme tarafından Gruplandırılmamış bir sonucu olarak.Bunu gerçekleştirmek için üzerinde sorgu sağlamak sahip DefaultIfEmpty gruplandırılmış toplama yöntemi.Bu sağdaki koleksiyonundan eşleşen bir sonuç olsa birleştirme işleminin sol taraftaki koleksiyonundan öğe hala sorgu sonucu içerdiği sağlar.Sorgunuz birleştirme işleminin sağ tarafındaki koleksiyonundan eşleşen hiçbir değer olduğunda varsayılan sonuç değeri sağlamak için kod ekleyebilirsiniz.

Left Outer JOIN yan tümcesi grubuna katılın kullanarak gerçekleştirmek için

  • Aşağıdaki kodu ekleyip Module1 gruplandırılmış bir sol dış birleşim hem de Gruplandırılmamış bir sol dış birleşim örneklerini görmek için Proje modülünde.

    Sub LeftOuterJoinExample()
        ' Create two lists.
        Dim people = GetPeople()
        Dim pets = GetPets(people)
    
        ' Grouped results.
        Dim petOwnersGrouped = From pers In people
                               Group Join pet In pets
                                 On pers Equals pet.Owner
                               Into PetList = Group
                               Select pers.FirstName, pers.LastName,
                                      PetList
    
        ' Display grouped results.
        Dim output As New System.Text.StringBuilder
        For Each pers In petOwnersGrouped
            output.AppendFormat(pers.FirstName & ":" & vbCrLf)
            For Each pt In pers.PetList
                output.AppendFormat(vbTab & pt.Name & vbCrLf)
            Next
        Next
    
        Console.WriteLine(output)
        ' This code produces the following output:
        '
        ' Magnus:
        '     Daisy
        ' Terry:
        '     Barley
        '     Boots
        '     Blue Moon
        ' Charlotte:
        '     Whiskers
        ' Arlene:
    
        ' "Flat" results.
        Dim petOwners = From pers In people
                        Group Join pet In pets On pers Equals pet.Owner
                        Into PetList = Group
                        From pet In PetList.DefaultIfEmpty()
                        Select pers.FirstName, pers.LastName,
                               PetName =
                                 If(pet Is Nothing, String.Empty, pet.Name)
    
    
        ' Display "flat" results.
        output = New System.Text.StringBuilder()
        For Each pers In petOwners
            output.AppendFormat( 
              pers.FirstName & ":" & vbTab & pers.PetName & vbCrLf)
        Next
    
        Console.WriteLine(output.ToString())
        ' This code produces the following output:
        '
        ' Magnus:       Daisy
        ' Terry:        Barley
        ' Terry:        Boots
        ' Terry:        Blue Moon
        ' Charlotte:    Whiskers
        ' Arlene:     
    End Sub
    

Bileşik anahtar kullanarak birleştirme gerçekleştirmek

Kullanabileceğiniz And anahtar sözcük bulunan bir Join veya Group Join eşleşme yapılırken kullanılacak birden çok anahtar alanları belirlemek için yan tümcesi Katılınan koleksiyonlardan değerleri.And Anahtar sözcüğünü belirtir belirtilen tüm anahtar alanları birleştirilecek maddeler için aynı olmalıdır.

Bileşik anahtar kullanarak birleştirme gerçekleştirmek için

  • Aşağıdaki kodu ekleyip Module1 bir bileşik anahtar kullanan bir birleşim örneklerini görmek için Proje modülünde.

    Sub CompositeKeyJoinExample()
        ' Create two lists.
        Dim people = GetPeople()
        Dim pets = GetPets(people)
    
        ' Implicit Join.
        Dim petOwners = From pers In people
                        Join pet In pets On
                          pet.Owner.FirstName Equals pers.FirstName And
                          pet.Owner.LastName Equals pers.LastName
                    Select pers.FirstName, PetName = pet.Name
    
        ' Display grouped results.
        Dim output As New System.Text.StringBuilder
        For Each pers In petOwners
            output.AppendFormat(
              pers.FirstName & ":" & vbTab & pers.PetName & vbCrLf)
        Next
    
        Console.WriteLine(output)
        ' This code produces the following output:
        '
        ' Magnus:    Daisy
        ' Terry:     Barley
        ' Terry:     Boots
        ' Terry:     Blue Moon
        ' Charlotte: Whiskers
    End Sub
    

Kod Çalıştır

Örnek kod eklemek için

  1. Yerine Sub Main , Module1 bu konudaki örneklerini çalıştırmak için aşağıdaki kod ile proje modülünde.

    Sub Main()
        InnerJoinExample()
        LeftOuterJoinExample()
        CompositeKeyJoinExample()
    
        Console.ReadLine()
    End Sub
    
  2. Örnekleri çalıştırmak için F5 tuşuna basın.

Ayrıca bkz.

Başvuru

Join yan tümcesi (Visual Basic)

Grup JOIN yan tümcesi (Visual Basic)

From yan tümcesi (Visual Basic)

WHERE yan tümcesi (Visual Basic)

Kavramlar

LINQ Visual Basic giriş

LINQ (C#) ile veri dönüşümleri

Diğer Kaynaklar

Visual Basic'te LINQ

Sorgular (Visual Basic)