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

Kueri

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 anonim

    Dim 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. Jenis londonCusts5 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 Joinmenggabungkan 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.

Lihat juga