Query expression menuliskan kueri dengan klausa yang menyerupai SQL: from menyatakan sumber, where menyaring, orderby mengurutkan, dan select menentukan hasil. Gaya penulisan ini paling nyaman untuk kueri sederhana karena alur datanya terbaca dari atas ke bawah. Kita mulai dari bentuk dasarnya sebelum melihat bentuk asli yang dibangkitkan compiler pada bab Method Syntax.
Bentuk Dasar Query Expression #
Contoh berikut mencari produk berharga di bawah Rp20000 lalu menyusun namanya secara alfabetis:
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 = from p in produk
where p.Harga < 20000
orderby p.Nama
select p.Nama;
foreach (string nama in produkMurah)
{
Console.WriteLine(nama);
}Output yang Dihasilkan:
Keripik Singkong
Roti Bakar
Teh MelatiMari kita bedah baris demi baris:
record Produk(...): positional record menyimpan data contoh; perilakunya sudah dibahas pada section Struct, Record, dan Enum.from p in produk: range variablepmewakili satuProdukpada setiap langkah kueri.where p.Harga < 20000: tiga produk lolos syarat harga; sisanya tidak diteruskan.orderby p.Nama: hasil disusun menaik menurut abjad nama.select p.Nama: hasil kueri berupaIEnumerable<string>, bukan kumpulanProduk, karena hanya nama yang dipilih.
Klausa yang Didukung #
Query expression menyediakan klausa berikut:
from— sumber data dan range variablewhere— syarat penyaringan, boleh lebih dari satuorderby— urutan menaik (ascending) atau menurun (descending)select— bentuk hasilgroup ... by— pengelompokan, dibahas pada bab Groupingjoin ... on ... equals— penggabungan dua koleksi, dibahas pada bab Joining
Daftar klausa tersebut lebih pendek daripada daftar operator LINQ. Operator seperti Count, First, dan Sum tidak memiliki padanan klausa, sehingga kueri yang memerlukannya tetap memakai pemanggilan method. Kedua gaya pun boleh dipakai bersama pada satu ekspresi yang sama.