Operasi Kueri Dasar (Visual Basic)
Topik ini menyediakan pengenalan singkat tentang ekspresi Language-Integrated Query (LINQ) dalam Visual Basic, dan beberapa jenis operasi umum yang Anda lakukan dalam kueri. Untuk mengetahui informasi selengkapnya, lihat topik berikut:
Pengantar LINQ di Visual Basic
Panduan: Menulis Kueri di Visual Basic
Menentukan sumber data
Dalam kueri LINQ, langkah pertama adalah menentukan sumber data. Oleh karena itu, klausa From
dalam kueri selalu lebih dulu. Operator kueri memilih dan membentuk hasil berdasarkan jenis sumber.
Dim query = From cust In customers
' ...
Klausul From
menentukan sumber data, customers
, dan variabel rentang, cust
. Variabel rentang seperti variabel perulangan dalam loop, kecuali bahwa tidak ada perulangan aktual yang terjadi dalam ekspresi kueri. Ketika kueri dijalankan, sering kali dengan menggunakan perulangan For Each
, variabel rentang berfungsi sebagai referensi ke setiap elemen berturut-turut di customers
. Karena kompilator dapat menyimpulkan jenis cust
, Anda tidak perlu menentukannya secara eksplisit. Untuk contoh kueri yang ditulis dengan dan tanpa pengetikan eksplisit, lihat Mengetik Hubungan dalam Operasi Kueri (Visual Basic).
Untuk informasi selengkapnya tentang cara menggunakan klausulFrom
di Visual Basic, lihat Dari Klausul.
Memfilter data: (Di mana)
Mungkin operasi kueri yang paling umum adalah menerapkan filter dalam formulir ungkapan Boolean. Kueri kemudian hanya mengembalikan elemen yang ekspresinya benar. Klausa Where
digunakan untuk melakukan pemfilteran. Filter menentukan elemen mana dalam sumber data yang akan disertakan dalam urutan yang dihasilkan. Dalam contoh berikut, hanya yang memiliki alamat di London yang ditampilkan.
Dim londonCusts = From cust In customers
Where cust.City = "London"
' ...
Anda dapat menggunakan operator logis seperti And
dan Or
untuk menggabungkan ekspresi filter dalam klausa Where
. Misalnya, untuk mengembalikan hanya pelanggan yang berasal dari London dan yang namanya Devon, gunakan kode berikut:
Where cust.City = "London" And cust.Name = "Devon"
Untuk menampilkan pelanggan dari London atau Paris, Anda dapat menulis kode berikut:
Where cust.City = "London" Or cust.City = "Paris"
Untuk informasi selengkapnya tentang cara menggunakan klausulWhere
di Visual Basic, lihat Di mana Klausul.
Mengurutkan Data (Urutkan Menurut)
Seringkali lebih mudah untuk mengurutkan data yang dikembalikan ke dalam urutan tertentu. Klausa Order By
akan menyebabkan elemen dalam urutan yang dikembalikan diurutkan pada bidang atau bidang tertentu. Misalnya, kueri berikut mengurutkan hasil berdasarkan properti Name
. Karena Name
merupakan string, data yang dikembalikan akan diurutkan menurut abjad, dari A ke Z.
Dim londonCusts1 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
' ...
Untuk mengurutkan hasil dalam urutan terbalik, dari Z ke A, gunakan klausul Order By...Descending
. Defaultnya adalah Ascending
ketika tidak ada Ascending
atau Descending
ditentukan.
Untuk informasi selengkapnya tentang cara menggunakan klausulOrder By
di Visual Basic, lihat Di mana Klausul.
Memilih Data (Pilih)
Klausa Select
menentukan formulir dan konten elemen yang dikembalikan. Misalnya, Anda dapat menentukan apakah hasil Anda akan terdiri dari objek Customer
lengkap, hanya satu properti Customer
, subset properti, kombinasi properti dari berbagai sumber data, atau beberapa jenis hasil baru berdasarkan komputasi. Jika klausul Select
menghasilkan sesuatu selain salinan elemen sumber, operasi ini disebut proyeksi.
Untuk mengambil koleksi yang terdiri dari objek Customer
lengkap, pilih variabel rentang itu sendiri:
Dim londonCusts2 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust
Jika instans Customer
adalah objek besar yang memiliki banyak bidang, dan yang ingin Anda ambil adalah nama, Anda dapat memilih cust.Name
, seperti yang ditunjukkan dalam contoh berikut. Inferensi jenis lokal mengenali bahwa ini mengubah jenis hasil dari kumpulan objek Customer
menjadi kumpulan string.
Dim londonCusts3 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust.Name
Untuk memilih beberapa bidang dari sumber data, Anda memiliki dua pilihan:
Dalam klausul
Select
, tentukan bidang yang ingin Anda sertakan dalam hasilnya. Kompilator akan menentukan jenis anonim yang memiliki bidang tersebut sebagai propertinya. Untuk informasi selengkapnya, lihat Jenis Anonim.Karena elemen yang dikembalikan dalam contoh berikut adalah instans jenis anonim, Anda tidak dapat merujuk ke jenis berdasarkan nama di tempat lain dalam kode Anda. Nama yang ditunjuk pengkompilasi untuk jenis berisi karakter yang tidak valid dalam kode Visual Basic normal. Dalam contoh berikut, elemen dalam koleksi yang dikembalikan oleh kueri di
londonCusts4
adalah instans jenis anonimDim londonCusts4 = From cust In customers Where cust.City = "London" Order By cust.Name Ascending Select Name = cust.Name, Phone = cust.Phone For Each londonCust In londonCusts4 Console.WriteLine(londonCust.Name & " " & londonCust.Phone) Next
-atau-
Tentukan jenis bernama yang berisi bidang tertentu yang ingin Anda sertakan dalam hasilnya, dan buat dan inisialisasi instans jenis dalam klausa
Select
. Gunakan opsi ini hanya jika Anda harus menggunakan hasil individual di luar koleksi tempat mereka dikembalikan, atau jika Anda harus meneruskannya sebagai parameter dalam panggilan metode. JenislondonCusts5
dalam contoh berikut adalah IEnumerable(Of NamePhone).Public Class NamePhone Public Name As String Public Phone As String ' Additional class elements End Class
Dim londonCusts5 = From cust In customers Where cust.City = "London" Order By cust.Name Ascending Select New NamePhone With {.Name = cust.Name, .Phone = cust.Phone}
Untuk informasi selengkapnya tentang cara menggunakan klausulSelect
di Visual Basic, lihat Di mana Klausul.
Menggabungkan Data (Gabung dan Bergabung dengan Grup)
Anda dapat menggabungkan lebih dari satu sumber data dalam klausul From
dalam beberapa cara. Misalnya, kode berikut menggunakan dua sumber data dan secara implisit menggabungkan properti dari keduanya dalam hasilnya. Kueri memilih siswa yang nama belakangnya dimulai dengan vokal.
Dim vowels() As String = {"A", "E", "I", "O", "U"}
Dim vowelNames = From student In students, vowel In vowels
Where student.Last.IndexOf(vowel) = 0
Select Name = student.First & " " &
student.Last, Initial = vowel
Order By Initial
For Each vName In vowelNames
Console.WriteLine(vName.Initial & ": " & vName.Name)
Next
Catatan
Anda dapat menjalankan kode ini dengan daftar siswa yang dibuat di Cara: Membuat Daftar Item.
Kata kunci Join
setara dengan INNER JOIN
pada SQL. Kata kunci ini menggabungkan dua koleksi berdasarkan nilai kunci yang cocok antara elemen dalam dua koleksi. Kueri mengembalikan semua atau sebagian dari elemen koleksi yang memiliki nilai kunci yang cocok. Misalnya, kode berikut menduplikasi tindakan gabungan implisit sebelumnya.
Dim vowelNames2 = From student In students
Join vowel In vowels
On student.Last(0) Equals vowel
Select Name = student.First & " " &
student.Last, Initial = vowel
Order By Initial
Group Join
menggabungkan koleksi ke dalam satu koleksi hierarkis, seperti LEFT JOIN
dalam SQL. Untuk informasi selengkapnya, lihat Gabungkan Klausa dan Klausul Gabungan Grup.
Mengelompokkan Data (Kelompokkan Menurut)
Anda bisa menambahkan klausa Group By
untuk mengelompokkan elemen dalam hasil kueri sesuai dengan satu atau beberapa bidang elemen. Misalnya, kode berikut mengelompokkan siswa menurut tahun kelas.
Dim studentsByYear = From student In students
Select student
Group By year = student.Year
Into Classes = Group
For Each yearGroup In studentsByYear
Console.WriteLine(vbCrLf & "Year: " & yearGroup.year)
For Each student In yearGroup.Classes
Console.WriteLine(" " & student.Last & ", " & student.First)
Next
Next
Jika Anda menjalankan kode ini menggunakan daftar siswa yang dibuat di Cara: Membuat Daftar Item, output dari For Each
pernyataan adalah:
Tahun: Junior
Tucker, Michael
Garcia, Hugo
Garcia, Debra
Tucker, Lance
Tahun: Senior
Omelchenko, Svetlana
Osada, Michiko
Fakhouri, Fadi
Feng, Hanying
Adams, Terry
Tahun: Mahasiswa baru
Mortensen, Sven
Garcia, Cesar
Variasi yang ditunjukkan dalam kode berikut mengurutkan tahun kelas, lalu mengurutkan siswa dalam masing-masing tahun dengan nama belakang.
Dim studentsByYear2 = From student In students
Select student
Order By student.Year, student.Last
Group By year = student.Year
Into Classes = Group
Untuk informasi lebih lanjut tentang Group By
, lihat Kelompokkan Berdasarkan Klausul.