Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Visual Basic, koleksiyonlar arasındaki ortak değerlere göre birden çok koleksiyonun içeriğini birleştirmenizi sağlayan Join ve Group Join sorgu yan tümcelerini sağlar. Bu değerler anahtar değerleri olarak bilinir. İlişkisel veritabanı kavramlarına aşina olan geliştiriciler, Join ifadesini INNER JOIN ve Group Join ifadesini ise etkili bir şekilde LEFT OUTER JOIN olarak tanıyacaklardır.
Bu konudaki örnekler, Join ve Group Join sorgu yan tümcelerini kullanarak verileri birleştirmenin birkaç yolunu göstermektedir.
Proje Oluşturma ve Örnek Veri Ekleme
Örnek veriler ve türler içeren bir proje oluşturmak için
Bu konudaki örnekleri çalıştırmak için Visual Studio'yu açın ve yeni bir Visual Basic Konsol Uygulaması projesi ekleyin. Visual Basic tarafından oluşturulan Module1.vb dosyasına çift tıklayın.
Bu konudaki örneklerde
PersonvePettürleri ile aşağıdaki kod örneğinden veri kullanılır. Bu kodu Visual Basic tarafından oluşturulan varsayılanModule1modüle kopyalayın.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 SubClass 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şim Gerçekleştirmek İçin Join Yan Tümcesi Kullanma
INNER JOIN, iki koleksiyondan verileri birleştirir. Belirtilen anahtar değerlerinin eşleşdiği öğeler eklenir. Diğer koleksiyonda eşleşen bir öğe olmayan herhangi bir koleksiyondaki öğeler dışlanır.
Visual Basic'te LINQ, INNER JOIN gerçekleştirmek için iki seçenek sunar: örtük birleştirme ve açık birleştirme.
Gizli birleştirme, bir From yan tümcesinde birleştirilecek koleksiyonları belirtir ve bir Where yan tümcesinde eşleşen anahtar alanlarını tanımlar. Visual Basic, belirtilen anahtar alanlarına göre iki koleksiyonu örtük olarak birleştirir.
Birleştirmede hangi anahtar alanlarının kullanılacağı konusunda belirli olmak istediğinizde yan tümcesini Join kullanarak açık bir birleşim belirtebilirsiniz. Bu durumda sorgu sonuçlarını filtrelemek için yan Where tümcesi kullanılabilir.
İç Birleştirme gerçekleştirmek için Join yan tümcesini kullanın
Hem örtük hem de açık iç birleşim örneklerini görmek için projenizdeki modüle aşağıdaki kodu
Module1ekleyin.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
Grup Birleştirme Yan Tümcesini Kullanarak Sol Dış Birleşim Yapın
LEFT OUTER JOIN, birleştirmenin sol tarafındaki koleksiyondaki tüm öğeleri ve yalnızca birleştirmenin sağ tarafındaki koleksiyonundan eşleşen değerleri içerir. Birleştirmenin sağ tarafındaki koleksiyonundaki, sol taraftaki koleksiyonda karşılık gelen bir öğe bulunmayan öğeler sorgu sonucundan dışlanır.
Group Join ifadesi özünde bir LEFT OUTER JOIN gerçekleştirir. Genellikle LEFT OUTER JOIN olarak bilinen ile Group Join yan tümcesinin döndürdüğü değer arasında fark, Group Join yan tümcesinin sol taraftaki koleksiyondaki her öğe için birleştirmenin sağ tarafındaki koleksiyonu gruplamasıdır. İlişkisel veritabanında, LEFT OUTER JOIN sorgu sonucundaki her öğenin birleştirmedeki her iki koleksiyondan eşleşen öğeleri içerdiği gruplandırılmamış bir sonuç döndürür. Bu durumda, birleştirmenin sol tarafındaki koleksiyondaki öğeler sağ taraftaki koleksiyondan eşleşen her öğe için yinelenir. Sonraki yordamı tamamladığınızda bunun nasıl göründüğünü göreceksiniz.
Gruplandırılan her sorgu sonucu için bir Group Join öğe döndürmek üzere sorgunuzu genişleterek, sorgunun sonuçlarını gruplandırılmamış bir sonuç olarak alabilirsiniz. Bunu başarmak için, gruplandırılmış koleksiyonun DefaultIfEmpty yöntemini sorguladığınızdan emin olmanız gerekir. Bu, sağ taraftaki koleksiyondan eşleşen sonuç olmasa bile birleştirmenin sol tarafındaki koleksiyondaki öğelerin sorgu sonucuna dahil edilmesini sağlar. Birleştirmenin sağ tarafındaki koleksiyondan eşleşen değer olmadığında varsayılan sonuç değeri sağlamak için sorgunuza kod ekleyebilirsiniz.
Sol Dış Birleşimi gerçekleştirmek için Group Join yan tümcesini kullanmak
Hem gruplandırılmış sol dış birleşim hem de gruplanmamış sol dış birleşim örneklerini görmek için projenizdeki modüle aşağıdaki kodu
Module1ekleyin.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ştirme
Bir And veya Join yan tümcesinde Group Join anahtar sözcüğünü kullanarak, birleştirilen koleksiyonlardaki değerleri eşleştirirken kullanılacak birden çok anahtar alanı tanımlayabilirsiniz. anahtar And sözcüğü, birleştirilecek öğeler için belirtilen tüm anahtar alanlarının eşleşmesi gerektiğini belirtir.
Bileşik anahtar kullanarak Birleştirme gerçekleştirmek için
Bileşik anahtar kullanan birleştirme örneklerini görmek için projenizdeki modüle aşağıdaki kodu
Module1ekleyin.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
Kodu Çalıştırma
Örnekleri çalıştırmak için kod eklemek için
Sub Mainöğesini, bu konudaki örnekleri çalıştırmak için projenizdekiModule1modülünde aşağıdaki kodla değiştirin.Sub Main() InnerJoinExample() LeftOuterJoinExample() CompositeKeyJoinExample() Console.ReadLine() End SubÖrnekleri çalıştırmak için F5 tuşuna basın.
Ayrıca bakınız
- LINQ
- Visual Basic'da LINQ'e
Giriş - Birleştirme Koşulu
- Group Join Yan Tümcesi
- From İfadesi
- Where Yan Tümcesi
- Arama Sorguları
- LINQ ile Veri Dönüşümleri (C#)