Kueri Terintegrasi Bahasa (LINQ)

Language-Integrated Query (LINQ) adalah nama untuk serangkaian teknologi berdasarkan integrasi kemampuan kueri langsung ke bahasa C#. Secara tradisional, kueri terhadap data dinyatakan sebagai string sederhana tanpa pemeriksaan jenis pada waktu kompilasi atau dukungan IntelliSense. Selain itu, Anda harus mempelajari bahasa kueri yang berbeda untuk setiap jenis sumber data: SQL database, dokumen XML, berbagai layanan Web, dan sebagainya. Dengan LINQ, kueri adalah konstruksi bahasa kelas-pertama, seperti kelas, metode, peristiwa.

Bagi pengembang yang menulis kueri, bagian "bahasa-terintegrasi" yang paling terlihat dari LINQ adalah ekspresi kueri. Ekspresi kueri ditulis dalam sintaks kueri deklaratif. Dengan menggunakan sintaks kueri, Anda dapat melakukan operasi pemfilteran, pengurutan, dan pengelompokan pada sumber data dengan kode minimum. Anda menggunakan pola ekspresi kueri dasar yang sama untuk mengkueri dan mengubah data dalam database SQL, Himpunan Data ADO .NET, dokumen dan aliran XML, dan koleksi .NET.

Contoh berikut menunjukkan operasi kueri lengkap. Operasi lengkap mencakup pembuatan sumber data, menentukan ekspresi kueri, dan menjalankan kueri dalam pernyataan foreach.

// Specify the data source.
int[] scores = { 97, 92, 81, 60 };

// Define the query expression.
IEnumerable<int> scoreQuery =
    from score in scores
    where score > 80
    select score;

// Execute the query.
foreach (int i in scoreQuery)
{
    Console.Write(i + " ");
}

// Output: 97 92 81

Gambaran umum ekspresi kueri

  • Ekspresi kueri dapat digunakan untuk mengkueri dan mengubah data dari sumber data yang diaktifkan-LINQ apa pun. Misalnya, satu kueri dapat mengambil data dari database SQL, dan menghasilkan aliran XML sebagai output.

  • Ekspresi kueri mudah dipahami karena menggunakan banyak konstruksi bahasa C# yang sudah dikenal.

  • Variabel dalam ekspresi kueri semuanya jenisnya ditentukan dengan tegas, meskipun dalam banyak kasus Anda tidak perlu memberikan jenis secara eksplisit karena pengkompilasi dapat menafsirkannya. Untuk informasi selengkapnya, lihat Hubungan jenis dalam operasi kueri LINQ.

  • Kueri tidak dijalankan sampai Anda mengulang variabel kueri, misalnya, dalam pernyataan foreach. Untuk informasi selengkapnya, lihat Pengenalan kueri LINQ.

  • Pada waktu kompilasi, ekspresi kueri dikonversi ke panggilan metode Operator Kueri Standar sesuai dengan aturan yang ditetapkan dalam spesifikasi C#. Kueri apa pun yang dapat diekspresikan dengan menggunakan sintaks kueri juga dapat diekspresikan dengan menggunakan sintaks metode. Namun, dalam kebanyakan kasus, sintaks kueri lebih mudah dibaca dan ringkas. Untuk informasi selengkapnya, lihat spesifikasi bahasa C# dan Gambaran umum operator kueri Standar.

  • Sebagai aturan saat Anda menulis kueri LINQ, kami sarankan Anda menggunakan sintaks kueri jika memungkinkan dan sintaks metode hanya bila diperlukan. Tidak ada perbedaan semantik atau performa antara dua bentuk yang berbeda ini. Ekspresi kueri sering lebih mudah dibaca daripada ekspresi setara yang ditulis dalam sintaks metode.

  • Beberapa operasi kueri, seperti Count atau Max, tidak memiliki klausa ekspresi kueri yang setara dan karenanya harus dinyatakan sebagai panggilan metode. Sintaks metode dapat dikombinasikan dengan sintaks kueri dengan beragam cara. Untuk informasi selengkapnya, lihat Sintaksis kueri dan sintaks metode di LINQ.

  • Ekspresi kueri dapat dikompilasi ke pohon ekspresi atau ke delegasi, tergantung pada jenis kueri yang berlaku. Kueri IEnumerable<T> dikompilasi ke delegasi. Kueri IQueryable dan IQueryable<T> dikompilasi ke pohon ekspresi. Untuk informasi lebih lanjut, lihat Pohon ekspresi.

Langkah berikutnya

Untuk mempelajari detail selengkapnya tentang LINQ, mulailah dengan membiasakan diri dengan beberapa konsep dasar dalam Dasar-dasar ekspresi kueri, lalu baca dokumentasi untuk teknologi LINQ yang menarik bagi Anda:

Untuk mendapatkan pemahaman yang lebih mendalam tentang LINQ secara umum, lihat LINQ di C#.

Untuk mulai bekerja dengan LINQ di C#, lihat tutorial Bekerja dengan LINQ.