Bagikan melalui


Fitur Visual Basic yang mendukung LINQ

Nama Language-Integrated Query (LINQ) mengacu pada teknologi di Visual Basic yang mendukung sintaks kueri dan konstruksi bahasa lain secara langsung dalam bahasa. Dengan LINQ, Anda tidak perlu mempelajari bahasa baru untuk mengkueri terhadap sumber data eksternal. Anda bisa mengkueri data dalam database relasional, penyimpanan XML, atau objek dengan menggunakan Visual Basic. Integrasi kemampuan kueri ke dalam bahasa ini memungkinkan pemeriksaan waktu kompilasi untuk kesalahan sintaksis dan keamanan jenis. Integrasi ini juga memastikan bahwa Anda sudah tahu sebagian besar apa yang harus Anda ketahui untuk menulis kueri yang kaya dan bervariasi di Visual Basic.

Bagian berikut menjelaskan konstruksi bahasa yang mendukung LINQ secara cukup rinci untuk memungkinkan Anda mulai membaca dokumentasi pengantar, contoh kode, dan aplikasi sampel. Anda juga dapat mengklik tautan untuk menemukan penjelasan yang lebih rinci tentang bagaimana fitur bahasa disatukan untuk mengaktifkan kueri yang terintegrasi dengan bahasa. Tempat yang baik untuk memulai adalah Panduan: Menulis Kueri di Visual Basic.

Ekspresi Kueri

Ekspresi kueri di Visual Basic dapat diekspresikan dalam sintaks deklaratif yang mirip dengan SQL atau XQuery. Pada waktu kompilasi, sintaks kueri dikonversi menjadi panggilan metode pada penyedia LINQ untuk implementasi metode ekstensi operator kueri standar. Aplikasi mengontrol operator kueri standar mana yang berada dalam cakupan dengan menentukan namespace yang sesuai dengan Imports pernyataan. Sintaks untuk ekspresi kueri Visual Basic terlihat seperti ini:

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

Untuk informasi selengkapnya, lihat Pengenalan LINQ di Visual Basic.

Variabel yang Dideklarasikan Secara Implisit

Alih-alih secara eksplisit menentukan jenis saat Anda mendeklarasikan dan menginisialisasi variabel, Anda dapat mengaktifkan kompilator untuk menyimpulkan dan menetapkan jenisnya. Ini disebut sebagai inferensi jenis lokal.

Variabel yang jenisnya diinferensikan bertipe kuat, sama seperti variabel yang jenisnya Anda tentukan secara eksplisit. Inferensi jenis lokal hanya berfungsi ketika Anda mendefinisikan variabel lokal di dalam isi metode. Untuk informasi selengkapnya, lihat Pernyataan Inferensi Opsi dan Inferensi Jenis Lokal.

Contoh berikut mengilustrasikan inferensi jenis lokal. Untuk menggunakan contoh ini, Anda harus mengatur Option Infer ke On.

' The variable aNumber will be typed as an integer.
Dim aNumber = 5

' The variable aName will be typed as a String.
Dim aName = "Virginia"

Inferensi jenis lokal juga memungkinkan untuk membuat jenis anonim, yang dijelaskan nanti di bagian ini dan diperlukan untuk kueri LINQ.

Dalam contoh LINQ berikut, inferensi jenis terjadi jika Option Infer berupa On atau Off. Kesalahan waktu kompilasi terjadi jika Option Infer adalah Off dan Option Strict adalah On.

' Query example.
' If numbers is a one-dimensional array of integers, num will be typed
' as an integer and numQuery will be typed as IEnumerable(Of Integer)--
' basically a collection of integers.

Dim numQuery = From num In numbers
               Where num Mod 2 = 0
               Select num

Penginisialisasi Objek

Penginisialisasi objek digunakan dalam ekspresi kueri saat Anda harus membuat tipe anonim untuk menyimpan hasil kueri. Mereka juga dapat digunakan untuk menginisialisasi objek dari jenis yang diberi nama pada luar kueri. Dengan menggunakan penginisialisasi objek, Anda dapat menginisialisasi objek dalam satu baris tanpa secara eksplisit memanggil konstruktor. Dengan asumsi bahwa Anda memiliki kelas bernama Customer yang memiliki properti publik Name dan Phone, bersama dengan properti lainnya, penginisialisasi objek dapat digunakan dengan cara ini:

Dim aCust = New Customer With {.Name = "Mike",
                               .Phone = "555-0212"}

Untuk informasi selengkapnya, lihat Penginisialisasi Objek: Jenis Bernama dan Anonim.

Jenis Anonim

Jenis anonim menyediakan cara mudah untuk mengelompokkan sekumpulan properti ke dalam elemen yang ingin Anda sertakan dalam hasil kueri untuk sementara waktu. Ini memungkinkan Anda memilih kombinasi bidang yang tersedia dalam kueri, dalam urutan apa pun, tanpa menentukan jenis data bernama untuk elemen .

Jenis anonim dibangun secara dinamis oleh pengompilasi. Nama jenis ditetapkan oleh pengkompilasi, dan mungkin berubah dengan setiap kompilasi baru. Oleh karena itu, nama tidak dapat digunakan secara langsung. Jenis anonim diinisialisasi dengan cara berikut:

' Outside a query.
Dim product = New With {.Name = "paperclips", .Price = 1.29}

' Inside a query.
' You can use the existing member names of the selected fields, as was
' shown previously in the Query Expressions section of this topic.
Dim londonCusts1 = From cust In customers
                   Where cust.City = "London"
                   Select cust.Name, cust.Phone

' Or you can specify new names for the selected fields.
Dim londonCusts2 = From cust In customers
                   Where cust.City = "London"
                   Select CustomerName = cust.Name,
                   CustomerPhone = cust.Phone

Untuk informasi selengkapnya, lihat Jenis Anonim.

Metode Ekstensi

Metode ekstensi memungkinkan Anda menambahkan metode ke jenis data atau antarmuka dari luar definisi. Fitur ini memungkinkan Anda untuk, pada dasarnya, menambahkan metode baru ke jenis yang ada tanpa benar-benar memodifikasi jenisnya. Operator kueri standar adalah sekumpulan metode ekstensi yang menyediakan fungsionalitas kueri LINQ untuk jenis apa pun yang mengimplementasikan IEnumerable<T>. Ekstensi lain untuk IEnumerable<T> menyertakan Count, Union, dan Intersect.

Metode ekstensi berikut menambahkan metode cetak ke String kelas .

' Import System.Runtime.CompilerServices to use the Extension attribute.
<Extension()>
Public Sub Print(ByVal str As String)
    Console.WriteLine(str)
End Sub

Metode ini disebut seperti metode instans biasa dari String:

Dim greeting As String = "Hello"
greeting.Print()

Untuk informasi selengkapnya, lihat Metode Ekstensi.

Ekspresi Lambda

Ekspresi lambda adalah fungsi tanpa nama yang menghitung dan mengembalikan satu nilai. Tidak seperti fungsi bernama, ekspresi lambda dapat didefinisikan dan dijalankan secara bersamaan. Contoh berikut menampilkan 4.

Console.WriteLine((Function(num As Integer) num + 1)(3))

Anda dapat menetapkan definisi ekspresi lambda ke nama variabel lalu menggunakan nama untuk memanggil fungsi. Contoh berikut juga menampilkan 4.

Dim add1 = Function(num As Integer) num + 1
Console.WriteLine(add1(3))

Dalam LINQ, ekspresi lambda mendasari banyak operator kueri standar. Pengkompilasi membuat ekspresi lambda untuk mengambil perhitungan yang ditentukan dalam metode kueri mendasar seperti Where, , SelectOrder By, Take While, dan lainnya.

Misalnya, kode berikut menentukan kueri yang mengembalikan semua siswa senior dari daftar siswa.

Dim seniorsQuery = From stdnt In students
                   Where stdnt.Year = "Senior"
                   Select stdnt

Definisi kueri dikompilasi ke dalam kode yang mirip dengan contoh berikut, yang menggunakan dua ekspresi lambda untuk menentukan argumen untuk Where dan Select.

Dim seniorsQuery2 = students.
    Where(Function(st) st.Year = "Senior").
    Select(Function(s) s)

Salah satu versi dapat dijalankan dengan menggunakan perulangan For Each :

For Each senior In seniorsQuery
    Console.WriteLine(senior.Last & ", " & senior.First)
Next

Untuk informasi selengkapnya, lihat Ekspresi Lambda.

Lihat juga