Bagikan melalui


Fitur Visual Basic yang Mendukung LINQ

Nama LINQ mengacu pada teknologi dalam Visual Basic yang mendukung sintaks kueri dan konstruksi bahasa lainnya langsung dalam bahasa tersebut. Dengan LINQ, Anda tidak perlu mempelajari bahasa baru untuk dikueri terhadap sumber data eksternal. Anda dapat meminta data dalam database relasional, penyimpanan XML, atau objek dengan menggunakan Visual Basic. Integrasi kemampuan kueri ke dalam bahasa ini memungkinkan pemeriksaan waktu kompilasi terhadap kesalahan sintaks dan keamanan jenis. Integrasi ini juga memastikan bahwa Anda sudah tahu sebagian besar tentang apa yang harus dipelajari untuk menulis kueri yang kaya dan beragam dalam Visual Basic.

Bagian berikut menjelaskan konstruksi bahasa yang mendukung LINQ secara cukup rinci untuk membantu Anda mulai membaca dokumentasi pengantar, contoh kode, dan aplikasi sampel. Anda juga dapat mengklik tautan untuk menemukan penjelasan lebih rinci tentang kerja sama fitur bahasa untuk mengaktifkan LINQ. Mulailah daru Panduan: Menulis Kueri di Visual Basic.

Ekspresi Kueri

Ekspresi kueri dalam Visual Basic dapat dinyatakan dalam sintaks deklaratif yang mirip dengan SQL atau XQuery. Pada waktu kompilasi, sintaks kueri diubah menjadi panggilan metode ke implementasi penyedia LINQ dari metode ekstensi operator kueri standar. Aplikasi mengontrol operator kueri standar mana yang berada dalam cakupan dengan menentukan namespace layanan yang sesuai dengan pernyataan Imports. 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 Pengantar LINQ di Visual Basic.

Variabel yang Diketik Secara Implisit

Alih-alih menentukan jenis secara eksplisit ketika mendeklarasikan dan menginisialisasi variabel, Anda dapat mengaktifkan pengompilasi untuk menyimpulkan dan menetapkan jenis. Hal ini disebut sebagai inferensi jenis lokal.

Variabel yang jenisnya disimpulkan diperiksa dengan ketat, seperti variabel yang jenisnya Anda tentukan secara eksplisit. Inferensi jenis lokal hanya berfungsi ketika Anda menentukan variabel lokal di dalam isi metode. Untuk informasi selengkapnya, lihat Pernyataan Inferensi Opsi dan Inferensi Jenis Lokal.

Contoh berikut menunjukkan inferensi jenis lokal. Untuk menggunakan contoh ini, Anda harus mengatur Option Infer menjadi 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. Hal ini nantinya dijelaskan di bagian ini dan diperlukan untuk kueri LINQ.

Dalam contoh LINQ berikut, inferensi jenis terjadi jika Option Infer adalah 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

Penginisial Objek

Penginisial objek digunakan dalam ekspresi kueri saat Anda harus membuat jenis anonim untuk menahan hasil kueri. Penginisial ini juga dapat digunakan untuk menginisialisasi objek dari jenis bernama di luar kueri. Dengan menggunakan penginisial objek, Anda dapat menginisialisasi objek dalam satu baris tanpa memanggil konstruktor secara eksplisit. Dengan asumsi bahwa Anda memiliki kelas bernama Customer yang memiliki properti Name dan Phone publik, bersama dengan properti lain, penginisial objek dapat digunakan dengan cara ini:

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

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

Jenis Anonim

Jenis anonim menyediakan cara yang nyaman untuk mengelompokkan satu set properti untuk sementara ke dalam elemen yang ingin Anda sertakan dalam hasil kueri. Hal ini memungkinkan Anda untuk memilih kombinasi bidang yang tersedia di kueri, dalam urutan apa pun, tanpa menentukan jenis data bernama untuk elemen tersebut.

Jenis anonim dibangun secara dinamis oleh pengompilasi. Nama jenis ditetapkan oleh pengompilasi, dan mungkin berubah pada setiap kompilasi baru. Oleh karena itu, nama tersebut tidak dapat digunakan secara langsung. Jenis anonim diinsialisasi 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 menambah metode ke jenis data atau antarmuka dari luar definisi. Pada dasarnya, fitur ini memungkinkan Anda untuk 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 semua jenis yang mengimplementasikan IEnumerable<T>. Ekstensi lain untuk IEnumerable<T> termasuk Count, Union, dan Intersect.

Metode ekstensi berikut menambahkan metode cetak ke kelas String.

' 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 memunculkan nilai tunggal. Tidak seperti fungsi bernama, ekspresi lambda dapat didefinisikan dan dijalankan pada saat yang sama. Contoh berikut menampilkan 4.

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

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

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

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

Misalnya, kode berikut menentukan kueri yang memunculkan 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