Bagikan melalui


Operasi Kueri Dasar (Visual Basic)

Topik ini menyediakan pengenalan singkat tentang ekspresi Language-Integrated Query (LINQ) di Visual Basic, dan untuk beberapa jenis operasi umum yang Anda lakukan dalam kueri. Untuk informasi selengkapnya, lihat topik berikut ini:

Pengenalan LINQ di Visual Basic

Pertanyaan

Panduan: Menulis Kueri di Visual Basic

Menentukan Sumber Data (Dari)

Dalam kueri LINQ, langkah pertama adalah menentukan sumber data yang ingin Anda kueri. Oleh karena itu, From klausa dalam kueri selalu menjadi yang pertama. Operator kueri memilih dan membentuk hasil berdasarkan jenis sumber.

Dim query = From cust In customers
'           ...

Klausa From menentukan sumber data, customers, dan variabel rentang, cust. Variabel rentang seperti variabel iterasi perulangan, kecuali bahwa dalam ekspresi kueri, tidak ada perulangan aktual yang terjadi. Ketika kueri dijalankan, sering kali dengan menggunakan perulangan For Each , variabel rentang berfungsi sebagai referensi ke setiap elemen berturut-turut di customers. Karena pengkompilasi 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 klausa From di Visual Basic, lihat From Clause.

Menyaring Data (Dengan Kondisi)

Mungkin operasi kueri yang paling umum adalah menerapkan filter dalam bentuk ekspresi Boolean. Kueri kemudian hanya mengembalikan elemen yang ekspresinya benar. Where Klausa digunakan untuk melakukan pemfilteran. Filter menentukan elemen mana dalam sumber data yang akan disertakan dalam urutan yang dihasilkan. Dalam contoh berikut, hanya pelanggan yang memiliki alamat di London yang disertakan.

Dim londonCusts = From cust In customers
                  Where cust.City = "London"
'                 ...

Anda dapat menggunakan operator logis seperti And dan Or untuk menggabungkan ekspresi filter dalam Where klausa. 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 mengembalikan pelanggan dari London atau Paris, gunakan kode berikut:

Where cust.City = "London" Or cust.City = "Paris"

Untuk informasi selengkapnya tentang cara menggunakan Where klausa di Visual Basic, lihat Klausa Where.

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 Name properti . 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 Order By...Descending klausa. Defaultnya adalah Ascending ketika tidak ada Ascending juga Descending yang ditentukan.

Untuk informasi selengkapnya tentang cara menggunakan Order By klausa di Visual Basic, lihat Urutan Menurut Klausa.

Memilih Data (Pilih)

Klausa Select menentukan formulir dan konten elemen yang dikembalikan. Misalnya, Anda dapat menentukan apakah hasil Anda akan terdiri dari objek lengkap Customer , hanya satu Customer properti, subset properti, kombinasi properti dari berbagai sumber data, atau beberapa jenis hasil baru berdasarkan komputasi. Select Ketika klausul menghasilkan sesuatu selain salinan elemen sumber, operasi disebut proyeksi.

Untuk mengambil koleksi yang terdiri dari objek lengkap Customer , pilih variabel rentang itu sendiri:

Dim londonCusts2 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust

Customer Jika instans 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 Customer objek 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:

  • Select Dalam klausa, tentukan bidang yang ingin Anda sertakan dalam hasilnya. Pengompilasi 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 kompilator 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 tipe bernama yang berisi kolom tertentu yang ingin Anda sertakan dalam hasilnya, dan buat dan inisialisasi instans tipe tersebut dalam klausa Select. Gunakan opsi ini hanya jika Anda harus menggunakan hasil individual di luar koleksi tempat hasil-hasil tersebut 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 Select klausa di Visual Basic, lihat Pilih Klausa.

Menggabungkan Data (Gabung dan Gabung Grup)

Anda dapat menggabungkan lebih dari satu sumber data dalam From klausa 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

Nota

Anda dapat menjalankan kode ini dengan daftar siswa yang dibuat di Cara: Membuat Daftar Item.

Kata Join kunci setara dengan INNER JOIN di SQL. Ini menggabungkan dua koleksi berdasarkan nilai kunci yang cocok antara elemen dalam dua koleksi. Kueri mengembalikan semua atau sebagian 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, sama seperti LEFT JOIN di SQL. Untuk informasi selengkapnya, lihat Klausul Gabungan dan Klausul Gabungan Grup.

Mengelompokkan Data (Kelompokkan Menurut)

Anda dapat menambahkan Group By klausa 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 setiap tahun berdasarkan 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 selengkapnya tentang Group By, lihat Klausa Group By.

Lihat juga