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:

csharp
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:

text
85
90
75

Mari kita bedah baris demi baris:

  1. from n in nilaiUjian: klausa from menyatakan sumber data dan mendeklarasikan range variable n yang mewakili satu elemen.
  2. where n >= 70: syarat penyaringan; hanya elemen yang memenuhi syarat yang diteruskan ke klausa berikutnya.
  3. select n: klausa select menentukan bentuk hasil; di sini nilai n diteruskan apa adanya.
  4. 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:

KategoriOperator contohBab pembahas
FilteringWhereFiltering dan Where
ProjectionSelectProjection dan Select
OrderingOrderByOrdering
GroupingGroupByGrouping
AggregationSum, AverageAggregation
ConversionToList, ToArrayConversion 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.