Operasi Proyeksi (Visual Basic)
Proyeksi mengacu pada operasi mengubah objek menjadi bentuk baru yang sering hanya terdiri dari sifat-sifat yang kemudian akan digunakan. Dengan menggunakan proyeksi, Anda bisa membangun jenis baru yang dibangun dari setiap objek. Anda bisa memproyeksikan properti dan melakukan fungsi matematika di atasnya. Anda juga bisa memproyeksikan objek asli tanpa mengubahnya.
Metode operator kueri standar yang melakukan proyeksi tercantum di bagian berikut.
Metode
Nama Metode | Deskripsi | Sintaks Ekspresi Kueri Visual Basic | Informasi Selengkapnya |
---|---|---|---|
Pilih | Nilai proyek yang didasarkan pada fungsi transformasi. | Select |
Enumerable.Select Queryable.Select |
SelectMany | Proyek urutan nilai yang didasarkan pada fungsi transformasi dan kemudian meratakannya menjadi satu urutan. | Menggunakan beberapa klausul From |
Enumerable.SelectMany Queryable.SelectMany |
Kode Pos | Menghasilkan urutan tuple dengan elemen dari 2-3 urutan yang ditentukan. | Tidak berlaku. | Enumerable.Zip Queryable.Zip |
Contoh Sintaksis Ekspresi Kueri
Pilih
Contoh berikut menggunakan klausa Select
untuk memproyeksikan huruf pertama dari setiap string dalam daftar string.
Dim words = New List(Of String) From {"an", "apple", "a", "day"}
Dim query = From word In words
Select word.Substring(0, 1)
Dim sb As New System.Text.StringBuilder()
For Each letter As String In query
sb.AppendLine(letter)
Next
' Display the output.
MsgBox(sb.ToString())
' This code produces the following output:
' a
' a
' a
' d
SelectMany
Contoh berikut menggunakan beberapa klausul From
untuk memproyeksikan setiap kata dari setiap string dalam daftar string.
Dim phrases = New List(Of String) From {"an apple a day", "the quick brown fox"}
Dim query = From phrase In phrases
From word In phrase.Split(" "c)
Select word
Dim sb As New System.Text.StringBuilder()
For Each str As String In query
sb.AppendLine(str)
Next
' Display the output.
MsgBox(sb.ToString())
' This code produces the following output:
' an
' apple
' a
' day
' the
' quick
' brown
' fox
Pilih versus SelectMany
Pekerjaan Select()
dan SelectMany()
adalah menghasilkan nilai hasil (atau nilai) dari nilai sumber. Select()
menghasilkan satu nilai hasil untuk setiap nilai sumber. Oleh karena itu, hasil keseluruhan adalah koleksi yang memiliki jumlah elemen yang sama dengan koleksi sumber. Sebaliknya, SelectMany()
menghasilkan hasil keseluruhan tunggal yang berisi sub-koleksi gabungan dari setiap nilai sumber. Fungsi transformasi yang diteruskan sebagai argumen ke SelectMany()
harus mengembalikan urutan nilai yang bisa disebutkan untuk setiap nilai sumber. Urutan yang bisa dijumlahkan ini kemudian digabungkan dengan SelectMany()
untuk membuat satu urutan besar.
Dua ilustrasi berikut menunjukkan perbedaan konseptual antara tindakan kedua metode ini. Dalam setiap kasus, asumsikan bahwa fungsi pemilih (transformasi) memilih array bunga dari setiap nilai sumber.
Ilustrasi ini menggambarkan cara Select()
mengembalikan koleksi yang memiliki jumlah elemen yang sama dengan kumpulan sumber.
Ilustrasi ini menggambarkan cara SelectMany()
menggabungkan urutan menengah larik menjadi satu nilai hasil akhir yang berisi setiap nilai dari setiap larik menengah.
Contoh Kode
Contoh berikut membandingkan perilaku Select()
dan SelectMany()
. Kode ini membuat "buket" bunga dengan mengambil item dari setiap daftar nama bunga dalam koleksi sumber. Dalam contoh ini, "nilai tunggal" yang digunakan Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) fungsi transformasi adalah kumpulan nilai itu sendiri. Ini memerlukan perulangan For Each
ekstra untuk menghitung setiap string di setiap sub-urutan.
Class Bouquet
Public Flowers As List(Of String)
End Class
Sub SelectVsSelectMany()
Dim bouquets = New List(Of Bouquet) From {
New Bouquet With {.Flowers = New List(Of String)(New String() {"sunflower", "daisy", "daffodil", "larkspur"})},
New Bouquet With {.Flowers = New List(Of String)(New String() {"tulip", "rose", "orchid"})},
New Bouquet With {.Flowers = New List(Of String)(New String() {"gladiolis", "lily", "snapdragon", "aster", "protea"})},
New Bouquet With {.Flowers = New List(Of String)(New String() {"larkspur", "lilac", "iris", "dahlia"})}}
Dim output As New System.Text.StringBuilder
' Select()
Dim query1 = bouquets.Select(Function(b) b.Flowers)
output.AppendLine("Using Select():")
For Each flowerList In query1
For Each str As String In flowerList
output.AppendLine(str)
Next
Next
' SelectMany()
Dim query2 = bouquets.SelectMany(Function(b) b.Flowers)
output.AppendLine(vbCrLf & "Using SelectMany():")
For Each str As String In query2
output.AppendLine(str)
Next
' Display the output
MsgBox(output.ToString())
' This code produces the following output:
'
' Using Select():
' sunflower
' daisy
' daffodil
' larkspur
' tulip
' rose
' orchid
' gladiolis
' lily
' snapdragon
' aster
' protea
' larkspur
' lilac
' iris
' dahlia
' Using SelectMany()
' sunflower
' daisy
' daffodil
' larkspur
' tulip
' rose
' orchid
' gladiolis
' lily
' snapdragon
' aster
' protea
' larkspur
' lilac
' iris
' dahlia
End Sub
Lihat juga
- System.Linq
- Ringkasan Operator Kueri Standar (Visual Basic)
- Pilih Klausul
- Cara: Menggabungkan Data dengan Gabungan
- Cara: Mengisi Kumpulan Objek dari Berbagai Sumber (LINQ) (Visual Basic)
- Cara: Mengembalikan Hasil Kueri LINQ sebagai Tipe Tertentu
- Cara: Membagi File Menjadi Banyak File dengan Menggunakan Grup (LINQ) (Visual Basic)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk