Method syntax menuliskan kueri sebagai rangkaian pemanggilan extension method dengan lambda expression. Inilah bentuk yang sebenarnya dihasilkan compiler dari query expression, sekaligus gaya yang wajib dipakai untuk operator seperti Count, First, dan Sum. Memahami gaya ini membuat kita dapat membaca kueri dalam kedua bentuk tanpa kebingungan.

Lambda dan Rantai Operator #

Kueri pada bab sebelumnya ditulis ulang di sini dengan method syntax:

csharp
record Produk(string Nama, string Kategori, int Harga, int Stok);

List<Produk> produk = new()
{
    new Produk("Kopi Gayo", "Minuman", 25000, 40),
    new Produk("Teh Melati", "Minuman", 15000, 60),
    new Produk("Roti Bakar", "Makanan", 12000, 25),
    new Produk("Susu UHT", "Minuman", 20000, 35),
    new Produk("Keripik Singkong", "Makanan", 10000, 80)
};

var produkMurah = produk
    .Where(p => p.Harga < 20000)
    .OrderBy(p => p.Nama)
    .Select(p => p.Nama);

foreach (string nama in produkMurah)
{
    Console.WriteLine(nama);
}

Output yang Dihasilkan:

text
Keripik Singkong
Roti Bakar
Teh Melati

Mari kita bedah baris demi baris:

  1. produk.Where(...): Where adalah extension method pada IEnumerable<T>, sehingga kueri kini berupa pemanggilan method biasa.
  2. p => p.Harga < 20000: lambda expression mewakili fungsi penyaringan; p adalah parameter, dan ekspresi di sebelah kanan adalah syaratnya.
  3. .OrderBy(p => p.Nama): hasil Where langsung disambung ke operator berikutnya; pola ini disebut chaining.
  4. .Select(p => p.Nama): projection terakhir mengubah setiap elemen menjadi string nama.
  5. produkMurah: tipe hasilnya IEnumerable<string>, sama persis dengan hasil query expression pada bab sebelumnya.

Kapan Memilih Method Syntax #

Method syntax menjadi pilihan utama pada kondisi berikut:

  • Operator agregasi dan elemen (Count, First, Sum) tidak punya padanan klausa di query expression.
  • Kueri yang syaratnya dinamis lebih mudah disusun bertahap, satu panggilan per syarat.
  • Kedua gaya boleh dicampur, misalnya (from p in produk where p.Stok > 0 select p).Count().

Kebiasaan lain yang membantu adalah menamai variabel hasil sesuai maksud kueri, misalnya produkMurah alih-alih hasil1, sehingga rantai operator dapat dibaca tanpa menelusuri tiap lambda.

Setelah bentuk asli kueri ini jelas, bab-bab berikutnya langsung memakai method syntax sebagai gaya utama dan menampilkan padanan query expression bila relevan.