Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Untuk menulis kueri secara efektif, Anda harus memahami bagaimana jenis variabel dalam operasi kueri lengkap semuanya berhubungan satu sama lain. Jika Anda memahami hubungan ini, Anda akan lebih mudah memahami sampel LINQ dan contoh kode dalam dokumentasi. Selain itu, Anda akan memahami apa yang terjadi ketika variabel secara implisit di ketik dengan menggunakan var.
Operasi kueri LINQ diketik secara ketat pada sumber data, dalam kueri itu sendiri, dan dalam eksekusi kueri. Jenis variabel dalam kueri harus kompatibel dengan jenis elemen di sumber data dan dengan jenis variabel iterasi dalam foreach pernyataan. Pengetikan bertipe yang kuat ini menjamin bahwa kesalahan tipe ditemukan saat dikompilasi, sehingga dapat diperbaiki sebelum mencapai pengguna.
Untuk menunjukkan hubungan jenis ini, sebagian besar contoh yang mengikuti menggunakan pengetikan eksplisit untuk semua variabel. Contoh terakhir menunjukkan bagaimana prinsip yang sama berlaku bahkan ketika Anda menggunakan pengetikan implisit dengan menggunakan var.
Kueri yang tidak Mengubah Data Sumber
Ilustrasi berikut menunjukkan operasi kueri LINQ ke Objek yang tidak melakukan transformasi pada data. Sumber berisi urutan string dan output kueri juga merupakan urutan string.
- Argumen jenis sumber data menentukan jenis variabel rentang.
- Jenis objek yang dipilih menentukan jenis variabel kueri. Berikut
nameadalah string. Oleh karena itu, variabel kueri adalahIEnumerable<string>. - Variabel kueri diulang dalam
foreachpernyataan. Karena variabel kueri adalah urutan string, variabel iterasi juga merupakan string.
Kueri yang Mengubah Data Sumber
Ilustrasi berikut menunjukkan operasi kueri LINQ ke SQL yang melakukan transformasi sederhana pada data. Kueri mengambil urutan objek Customer sebagai input, dan hanya memilih properti Name dalam hasil. Karena Name merupakan string, kueri menghasilkan urutan string sebagai output.
- Argumen jenis sumber data menentukan jenis variabel rentang.
- Pernyataan
selectmengembalikanNameproperti alih-alih objek lengkapCustomer. KarenaNameadalah string, argumen jeniscustNameQueryadalahstring, bukanCustomer. - Karena
custNameQuerymerupakan urutan string, variabel iterasiforeachperulangan juga harus berupastring.
Ilustrasi berikut menunjukkan transformasi yang sedikit lebih kompleks. Pernyataan select mengembalikan jenis anonim yang memuat hanya dua anggota dari objek asli Customer.
- Argumen jenis sumber data selalu merupakan jenis variabel rentang dalam kueri.
-
selectKarena pernyataan menghasilkan jenis anonim, variabel kueri harus ditik secara implisit dengan menggunakanvar. - Karena jenis variabel kueri implisit, variabel iterasi dalam perulangan
foreachjuga harus implisit.
Membiarkan kompilator menyimpulkan informasi jenis
Meskipun Anda harus memahami hubungan jenis dalam operasi kueri, Anda memiliki opsi untuk membiarkan pengkompilasi melakukan semua pekerjaan untuk Anda. Kata kunci var dapat digunakan untuk variabel lokal apa pun dalam operasi kueri. Ilustrasi berikut mirip dengan contoh nomor 2 yang dibahas sebelumnya. Namun, pengkompilasi menyediakan jenis yang kuat untuk setiap variabel dalam operasi kueri.
LINQ dan jenis generik (C#)
Kueri LINQ didasarkan pada jenis generik. Anda tidak memerlukan pengetahuan mendalam tentang generik sebelum Anda dapat mulai menulis kueri. Namun, Anda mungkin ingin memahami dua konsep dasar:
- Saat Anda membuat instans kelas koleksi generik seperti List<T>, Anda mengganti "T" dengan jenis objek yang akan disimpan dalam daftar. Misalnya, daftar string dinyatakan sebagai
List<string>, dan daftarCustomerobjek dinyatakan sebagaiList<Customer>. Daftar generik diketik secara tegas dan memberikan banyak manfaat dibandingkan koleksi yang menyimpan elemennya sebagai Object. Jika Anda mencoba menambahkanCustomerkeList<string>, Anda akan mendapatkan kesalahan pada waktu kompilasi. Sangat mudah untuk menggunakan koleksi generik karena Anda tidak perlu melakukan pemeriksaan tipe runtime. -
IEnumerable<T> adalah antarmuka yang memungkinkan kelas pengumpulan generik dijumlahkan dengan menggunakan
foreachpernyataan . Kelas koleksi generik mendukung IEnumerable<T> sama seperti kelas koleksi non-generik mendukung ArrayList.
Untuk informasi selengkapnya tentang generik, lihat Generik.
Variabel IEnumerable<T> dalam kueri LINQ
Variabel kueri LINQ diketik sebagai IEnumerable<T> atau jenis turunan seperti IQueryable<T>. Ketika Anda melihat variabel kueri yang di ketik sebagai IEnumerable<Customer>, itu hanya berarti bahwa kueri, ketika dijalankan, akan menghasilkan urutan nol atau lebih Customer objek.
IEnumerable<Customer> customerQuery = from cust in customers
where cust.City == "London"
select cust;
foreach (Customer customer in customerQuery)
{
Console.WriteLine($"{customer.LastName}, {customer.FirstName}");
}
Membiarkan kompilator menangani deklarasi jenis generik
Jika mau, Anda dapat menghindari sintaks generik dengan menggunakan kata kunci var . Kata var kunci menginstruksikan pengkompilasi untuk menyimpulkan jenis variabel kueri dengan melihat sumber data yang ditentukan dalam from klausa. Contoh berikut menghasilkan kode yang dikompilasi yang sama dengan contoh sebelumnya:
var customerQuery2 = from cust in customers
where cust.City == "London"
select cust;
foreach(var customer in customerQuery2)
{
Console.WriteLine($"{customer.LastName}, {customer.FirstName}");
}
Kata var kunci berguna ketika jenis variabel jelas atau ketika tidak terlalu penting untuk secara eksplisit menentukan jenis generik berlapis seperti yang dihasilkan oleh kueri grup. Secara umum, kami menyarankan agar jika Anda menggunakan var, menyadari bahwa itu dapat membuat kode Anda lebih sulit dibaca orang lain. Untuk informasi selengkapnya, lihat Variabel Lokal Berjenis Implisit.