Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Visual Basic menyediakan Join klausa kueri dan Group Join untuk memungkinkan Anda menggabungkan konten beberapa koleksi berdasarkan nilai umum di antara koleksi. Nilai-nilai ini dikenal sebagai nilai kunci . Pengembang yang terbiasa dengan konsep database relasional akan mengenali Join klausul sebagai INNER JOIN dan Group Join klausul sebagai, secara efektif, LEFT OUTER JOIN.
Contoh dalam topik ini menunjukkan beberapa cara untuk menggabungkan data dengan menggunakan Join klausa kueri dan Group Join .
Membuat Proyek dan Menambahkan Data Sampel
Untuk membuat proyek yang berisi data dan jenis sampel
Untuk menjalankan sampel dalam topik ini, buka Visual Studio dan tambahkan proyek Aplikasi Visual Basic Console baru. Klik dua kali file Module1.vb yang dibuat oleh Visual Basic.
Sampel dalam topik ini menggunakan jenis
Persondan data dariPetdalam contoh kode berikut. Salin kode ini ke dalam modul defaultModule1yang dibuat oleh Visual Basic.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
Melakukan Inner Join dengan Menggunakan Klausa Join
INNER JOIN menggabungkan data dari dua kumpulan data. Item yang cocok dengan nilai kunci yang ditentukan disertakan. Item apa pun dari salah satu koleksi yang tidak memiliki item yang cocok di koleksi lain dikecualikan.
Di Visual Basic, LINQ menyediakan dua opsi untuk melakukan INNER JOIN: gabungan implisit dan gabungan eksplisit.
Gabungan implisit menentukan koleksi yang akan digabungkan dalam klausul From dan mengidentifikasi bidang kunci yang cocok dalam klausa Where. Visual Basic secara implisit menggabungkan dua koleksi berdasarkan bidang kunci yang ditentukan.
Anda dapat menentukan gabungan eksplisit dengan menggunakan Join klausa saat Anda ingin spesifik tentang bidang kunci mana yang akan digunakan dalam gabungan. Dalam hal ini, Where klausa masih dapat digunakan untuk memfilter hasil kueri.
Untuk melakukan Inner Join dengan menggunakan klausa JOIN
Tambahkan kode berikut ke modul
Module1dalam proyek Anda untuk melihat contoh inner join implisit dan eksplisit.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
Melakukan Gabungan Luar Kiri dengan Menggunakan Klausul Gabungan Grup
LEFT OUTER JOIN menyertakan semua elemen dari koleksi sisi kiri join dan hanya nilai yang cocok dari koleksi sisi kanan join. Item apa pun dari kumpulan sisi kanan gabungan yang tidak memiliki item yang cocok di koleksi sisi kiri dikecualikan dari hasil kueri.
Klausa Group Join pada dasarnya melakukan LEFT OUTER JOIN. Perbedaan antara apa yang biasanya dikenal sebagai LEFT OUTER JOIN dan apa yang dikembalikan oleh klausul Group Join adalah bahwa klausul Group Join mengelompokkan hasil dari kumpulan sisi kanan join untuk setiap item di kumpulan sisi kiri. Dalam database relasional, LEFT OUTER JOIN mengembalikan hasil yang tidak dikelompokkan di mana setiap item dalam hasil kueri berisi item yang cocok dari kedua kumpulan. Dalam hal ini, item dari koleksi sisi kiri gabungan diulang untuk setiap item yang cocok dari kumpulan sisi kanan. Anda akan melihat seperti apa tampilan ini ketika Anda menyelesaikan prosedur berikutnya.
Anda bisa mengambil hasil Group Join kueri sebagai hasil yang tidak dikelompokkan dengan memperluas kueri Anda agar dapat mengembalikan item untuk setiap hasil kueri yang dikelompokkan. Untuk mencapai hal ini, Anda harus memastikan bahwa Anda melakukan kueri pada metode DefaultIfEmpty dari koleksi yang dikelompokkan. Ini memastikan bahwa item dari koleksi sisi kiri penggabungan masih disertakan dalam hasil kueri bahkan jika mereka tidak memiliki hasil yang cocok dari koleksi sisi kanan. Anda dapat menambahkan kode ke kueri Anda untuk memberikan nilai hasil default saat tidak ada nilai yang cocok dari kumpulan gabungan sisi kanan.
Untuk melakukan Left Outer Join dengan menggunakan klausa Group Join
Tambahkan kode berikut ke
Module1modul di proyek Anda untuk melihat contoh gabungan luar kiri yang dikelompokkan dan gabungan luar kiri yang tidak dikelompokkan.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
Melakukan Gabungan dengan Menggunakan Kunci Komposit
Anda dapat menggunakan And kata kunci dalam Join klausa atau Group Join untuk mengidentifikasi beberapa bidang kunci yang akan digunakan saat mencocokkan nilai dari koleksi yang digabungkan. Kata And kunci menentukan bahwa semua bidang kunci yang ditentukan harus cocok untuk item yang akan digabungkan.
Untuk melakukan Join menggunakan kunci komposit
Tambahkan kode berikut ke
Module1modul di proyek Anda untuk melihat contoh gabungan yang menggunakan kunci komposit.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
Jalankan Kode
Untuk menambahkan kode untuk menjalankan contoh
Ganti
Sub Maindalam modulModule1di proyek Anda dengan kode berikut untuk menjalankan contoh dalam topik ini.Sub Main() InnerJoinExample() LeftOuterJoinExample() CompositeKeyJoinExample() Console.ReadLine() End SubTekan F5 untuk menjalankan contoh.