Mengolah kumpulan data adalah pekerjaan yang sering kita temui: mencari produk tertentu dari daftar, menjumlahkan nilai ujian, atau mengurutkan transaksi berdasarkan tanggal. Dengan loop foreach biasa, setiap kebutuhan tersebut ditulis sebagai rangkaian pernyataan if dan variabel penampung yang berulang-ulang. LINQ (Language Integrated Query) mengintegrasikan kemampuan mengkueri data langsung ke dalam C#, sehingga kita menyatakan apa yang ingin diambil, bukan langkah demi langkah cara mengambilnya.
Masalah yang Dipecahkan LINQ #
Bayangkan satu daftar produk yang perlu disaring, diurutkan, lalu dihitung stok totalnya. Tanpa LINQ, kita menulis tiga loop terpisah dan mengelola variabel antara sendiri. Dengan LINQ, ketiga langkah itu menjadi satu rangkaian klausa yang dibaca dari atas ke bawah, dan compiler memeriksa tipenya sejak saat kompilasi.
Kueri Pertama #
Contoh berikut menyaring nilai ujian yang mencapai batas kelulusan:
List<int> nilaiUjian = new() { 85, 60, 90, 45, 75 };
var lulus = from n in nilaiUjian
where n >= 70
select n;
foreach (int n in lulus)
{
Console.WriteLine(n);
}Output yang Dihasilkan:
85
90
75Mari kita bedah baris demi baris:
from n in nilaiUjian: klausafrommenyatakan sumber data dan mendeklarasikan range variablenyang mewakili satu elemen.where n >= 70: syarat penyaringan; hanya elemen yang memenuhi syarat yang diteruskan ke klausa berikutnya.select n: klausaselectmenentukan bentuk hasil; di sini nilainditeruskan apa adanya.foreach (int n in lulus): kueri benar-benar dieksekusi saat hasilnya diiterasi; perilaku ini dibedah pada bab Deferred Execution.
Peta Operator LINQ #
Operator LINQ terbagi ke dalam kategori menurut fungsinya:
| Kategori | Operator contoh | Bab pembahas |
|---|---|---|
| Filtering | Where | Filtering dan Where |
| Projection | Select | Projection dan Select |
| Ordering | OrderBy | Ordering |
| Grouping | GroupBy | Grouping |
| Aggregation | Sum, Average | Aggregation |
| Conversion | ToList, ToArray | Conversion Operations |
Sumber data yang memenuhi pola ini tidak terbatas pada koleksi di memori. Bab LINQ to Objects menuntut provider untuk objek di memori, dan bab LINQ dengan Entity Framework Core menunjukkan kueri yang diterjemahkan menjadi SQL.