Ringkasan angka seperti jumlah lulusan dan rata-rata kelas menjadi dasar laporan ujian. Operator agregasi menelusuri seluruh elemen dan mengembalikan satu nilai akhir. Semua operator pada bab ini dieksekusi segera saat dipanggil, bukan saat hasilnya diiterasi.

Operator Agregasi Bawaan #

Contoh berikut meringkas satu daftar nilai ujian dari beberapa arah:

csharp
int[] nilai = { 85, 60, 90, 45, 75 };

Console.WriteLine($"Lulus: {nilai.Count(n => n >= 70)}");
Console.WriteLine($"Total: {nilai.Sum()}");
Console.WriteLine($"Terendah: {nilai.Min()}");
Console.WriteLine($"Tertinggi: {nilai.Max()}");
Console.WriteLine($"Rata-rata: {nilai.Average()}");

string daftar = nilai.Aggregate("", (baris, n) => baris == "" ? $"{n}" : $"{baris}, {n}");
Console.WriteLine($"Daftar: {daftar}");

Output yang Dihasilkan:

text
Lulus: 3
Total: 355
Terendah: 45
Tertinggi: 90
Rata-rata: 71
Daftar: 85, 60, 90, 45, 75

Mari kita bedah baris demi baris:

  1. nilai.Count(n => n >= 70): menghitung elemen yang memenuhi predikat; tanpa predikat, Count() menghitung seluruh elemen.
  2. nilai.Sum(): menjumlahkan seluruh nilai; overload dengan selector seperti Sum(p => p.Harga) menjumlahkan satu property.
  3. nilai.Min() dan nilai.Max(): mengembalikan nilai terkecil dan terbesar.
  4. nilai.Average(): menghitung rata-rata; untuk int, hasilnya bertipe double, sehingga 355 dibagi 5 menghasilkan 71.
  5. nilai.Aggregate(...): pelipatan bebas dengan nilai awal ""; setiap langkah menyambung satu angka baru beserta pemisah koma.

Pemakaian pada Koleksi Object #

Operator agregasi juga menerima selector, sehingga satu baris cukup untuk ringkasan daftar Produk: produk.Sum(p => p.Stok) menghasilkan total stok, dan produk.Average(p => p.Harga) menghasilkan harga rata-rata. Selector pada Min dan Max juga mengembalikan nilai property terkecil atau terbesar, bukan object yang memilikinya. Pada bab Grouping, kedua operator ini dipasangkan dengan GroupBy untuk merangkum per grup.

Perilaku pada Urutan Kosong #

Operator Min, Max, dan Average melempar InvalidOperationException bila sumber kosong, karena tidak ada nilai yang dapat dilaporkan. Operator Sum dan Count() berbeda: keduanya mengembalikan 0 atas urutan kosong tanpa exception. Perilaku bawaan ini perlu diperhitungkan saat sumber data bisa saja belum terisi. Untuk hasil yang berpotensi melebihi batas int, operator LongCount dan Sum pada long menyediakan penghitungan dengan rentang lebih luas.