0Pricing
C# Academy · Pelajaran

WHERE dan Pemfilteran

Pilih elemen yang cocok

WHERE dan Pemfilteran adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang Dilakukan Where

Where adalah operator inti LINQ untuk penyaringan. Operator ini menerima predikat—fungsi yang mengembalikan bool—dan hanya menghasilkan elemen yang memenuhi predikat tersebut.

Operator ini berada di System.Linq dan bekerja pada IEnumerable<T> apa pun, dengan mengembalikan urutan baru alih-alih mengubah sumber.

using System;
using System.Linq;
using System.Collections.Generic;

var nums = new List<int> { 1, 2, 3, 4, 5, 6 };
var evens = nums.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", evens));

Lambda Predikat

Argumen untuk Where adalah lambda n => condition. Parameter tersebut mewakili setiap elemen, dan isi lambda harus dievaluasi menjadi true atau false.

Mengembalikan true akan mempertahankan elemen; false akan membuangnya. Ekspresi boolean apa pun dapat digunakan.

using System;
using System.Linq;

string[] words = { "apple", "fig", "banana", "kiwi" };
var shortWords = words.Where(w => w.Length <= 4);
Console.WriteLine(string.Join(", ", shortWords));

Bentuk Sintaks Kueri

LINQ menyediakan sintaks kueri yang menyerupai SQL. Klausa where melakukan penyaringan, sedangkan select melakukan proyeksi.

Sintaks ini dikompilasi menjadi pemanggilan metode yang sama, sehingga from x in src where ... select x setara dengan src.Where(...). Gunakan bentuk yang lebih mudah dibaca.

using System;
using System.Linq;

int[] scores = { 40, 75, 90, 55, 88 };
var passing = from s in scores
              where s >= 60
              select s;
Console.WriteLine(string.Join(", ", passing));

Menggabungkan Kondisi

Dalam satu predikat, Anda dapat menggabungkan beberapa pemeriksaan menggunakan && dan ||. Dengan begitu, penyaringan yang berkaitan tetap dilakukan dalam satu lintasan.

Tanda kurung membantu keterbacaan saat operator digabungkan, sama seperti pada ekspresi boolean lainnya.

using System;
using System.Linq;
using System.Collections.Generic;

var ages = new List<int> { 12, 17, 21, 35, 64, 70 };
var adults = ages.Where(a => a >= 18 && a < 65);
Console.WriteLine(string.Join(", ", adults));

Merangkai Pemanggilan Where

Anda dapat merangkai beberapa pemanggilan Where. Masing-masing menyaring hasil dari pemanggilan sebelumnya, sehingga kondisinya digabungkan dengan AND logis.

Perangkaian terkadang lebih jelas daripada satu predikat besar dan memungkinkan Anda menyusun filter yang dibuat di tempat berbeda.

using System;
using System.Linq;

int[] data = { 3, 8, 15, 22, 27, 40 };
var result = data.Where(n => n > 5)
                 .Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", result));

Where dengan Indeks

Salah satu varian Where menyediakan indeks elemen berbasis nol sebagai parameter lambda kedua. Hal ini berguna untuk penyaringan berdasarkan posisi.

Gunakan varian ini untuk mempertahankan, misalnya, setiap elemen berselang-seling atau melewati item pertama berdasarkan indeks.

using System;
using System.Linq;

string[] items = { "a", "b", "c", "d", "e" };
var evenIdx = items.Where((val, idx) => idx % 2 == 0);
Console.WriteLine(string.Join(", ", evenIdx));

Menyaring Objek

Penyaringan sangat berguna pada koleksi objek. Predikat dapat membaca properti apa pun dari setiap elemen.

Dengan cara inilah Anda menyatakan aturan bisnis—"pelanggan di kota ini", "pesanan di atas batas tertentu"—secara deklaratif.

using System;
using System.Linq;
using System.Collections.Generic;

record Product(string Name, decimal Price);
var list = new List<Product> {
  new("Pen", 1.5m), new("Lamp", 20m), new("Mug", 8m) };
var cheap = list.Where(p => p.Price < 10);
foreach (var p in cheap) Console.WriteLine(p.Name);

Eksekusi Tertunda

Where menggunakan eksekusi tertunda: operator ini tidak dijalankan saat didefinisikan, melainkan saat urutan diiterasi, misalnya dalam foreach atau dengan memanggil ToList.

Artinya, perubahan pada sumber sebelum iterasi akan tercermin dalam hasilnya.

using System;
using System.Linq;
using System.Collections.Generic;

var src = new List<int> { 1, 2 };
var q = src.Where(n => n > 1);
src.Add(5);
Console.WriteLine(string.Join(", ", q));

Biaya Evaluasi Ulang

Karena penyaringan ditunda, mengiterasi kueri yang sama dua kali akan menjalankan kembali predikat tersebut dua kali. Hal ini dapat mengejutkan Anda jika predikatnya mahal atau sumbernya aktif.

Jika Anda memerlukan snapshot yang stabil dan dapat digunakan kembali, wujudkan sekali dengan ToList—hal ini akan dibahas nanti dalam kursus ini.

using System;
using System.Linq;

int calls = 0;
int[] nums = { 1, 2, 3 };
var q = nums.Where(n => { calls++; return n > 1; });
foreach (var _ in q) { }
foreach (var _ in q) { }
Console.WriteLine(calls);

Menyaring, Lalu Menghitung

Pola yang umum adalah menyaring data, lalu menanyakan berapa banyak yang cocok. Count dapat menerima predikat secara langsung, sehingga penyaringan dan penghitungan digabungkan.

count.Count(p => cond) setara dengan seq.Where(p => cond).Count(), tetapi lebih ringkas dibaca.

using System;
using System.Linq;

int[] grades = { 55, 80, 42, 91, 67 };
int passed = grades.Count(g => g >= 60);
Console.WriteLine($"Passed: {passed}");

Hasil Kosong Tidak Masalah

Jika tidak ada elemen yang memenuhi predikat, Where cukup menghasilkan urutan kosong—tidak pernah null.

Hal ini membuat filter aman untuk dirangkai: hasil kosong dapat diteruskan ke operator berikutnya tanpa penanganan khusus.

using System;
using System.Linq;

int[] nums = { 1, 2, 3 };
var big = nums.Where(n => n > 100);
Console.WriteLine($"Count: {big.Count()}");

Uji Singkat

Uji pemahaman Anda tentang eksekusi tertunda.

Rangkuman

Where menyaring urutan berdasarkan predikat bernilai benar atau salah dan mengembalikan IEnumerable baru. Operator ini memiliki varian dengan indeks, dapat dirangkai atau digabungkan menggunakan &&/||, serta bekerja pada objek melalui propertinya.

Yang terpenting, operator ini tertunda—dijalankan saat iterasi, sehingga iterasi ulang akan mengevaluasi kembali predikat. Selanjutnya, kita akan membentuk data yang dipertahankan menggunakan Select.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “WHERE dan Pemfilteran” gratis?

Ya — teks lengkap “WHERE dan Pemfilteran” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “WHERE dan Pemfilteran”?

Pilih elemen yang cocok Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “WHERE dan Pemfilteran” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. WHERE dan Pemfilteran
  2. SELECT dan Proyeksi
  3. OrderBy dan Pengelompokan
  4. Agregat dan ToList
← Kembali ke C# Academy