klausul where (Referensi C#)
Klausul where
digunakan dalam ekspresi kueri untuk menentukan elemen mana dari sumber data yang akan dikembalikan dalam ekspresi kueri. Ini menerapkan kondisi Boolean (predicate) ke setiap elemen sumber (direferensikan oleh variabel rentang) dan mengembalikannya ke kondisi dengan penetapan true. Ekspresi kueri tunggal mungkin berisi beberapa klausul where
dan satu klausul mungkin berisi beberapa subekspresi predikat.
Contoh 1
Dalam contoh berikut, klausul where
memfilter semua angka kecuali yang kurang dari lima. Jika Anda menghapus klausul where
, semua angka dari sumber data akan dikembalikan. Ekspresi num < 5
adalah predikat yang diterapkan ke setiap elemen.
class WhereSample
{
static void Main()
{
// Simple data source. Arrays support IEnumerable<T>.
int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
// Simple query with one predicate in where clause.
var queryLowNums =
from num in numbers
where num < 5
select num;
// Execute the query.
foreach (var s in queryLowNums)
{
Console.Write(s.ToString() + " ");
}
}
}
//Output: 4 1 3 2 0
Contoh 2
Dalam satu where
klausul, Anda dapat menentukan predikat sebanyak yang diperlukan dengan menggunakan && dan || operator. Dalam contoh berikut, kueri menentukan dua predikat untuk memilih angka genap yang kurang dari lima saja.
class WhereSample2
{
static void Main()
{
// Data source.
int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
// Create the query with two predicates in where clause.
var queryLowNums2 =
from num in numbers
where num < 5 && num % 2 == 0
select num;
// Execute the query
foreach (var s in queryLowNums2)
{
Console.Write(s.ToString() + " ");
}
Console.WriteLine();
// Create the query with two where clause.
var queryLowNums3 =
from num in numbers
where num < 5
where num % 2 == 0
select num;
// Execute the query
foreach (var s in queryLowNums3)
{
Console.Write(s.ToString() + " ");
}
}
}
// Output:
// 4 2 0
// 4 2 0
Contoh 3
Klausul where
boleh berisi satu atau beberapa metode yang mengembalikan nilai Boolean. Dalam contoh berikut, klausul where
menggunakan metode untuk menentukan apakah nilai variabel rentang saat ini genap atau ganjil.
class WhereSample3
{
static void Main()
{
// Data source
int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
// Create the query with a method call in the where clause.
// Note: This won't work in LINQ to SQL unless you have a
// stored procedure that is mapped to a method by this name.
var queryEvenNums =
from num in numbers
where IsEven(num)
select num;
// Execute the query.
foreach (var s in queryEvenNums)
{
Console.Write(s.ToString() + " ");
}
}
// Method may be instance method or static method.
static bool IsEven(int i) => i % 2 == 0;
}
//Output: 4 8 6 2 0
Keterangan
Klausul where
adalah suatu mekanisme pemfilteran. Ini dapat diposisikan hampir di mana saja dalam ekspresi kueri, asalkan bukan menjadi klausul pertama atau terakhir. Klausul where
boleh muncul baik sebelum atau sesudah klausul group tergantung pada apakah Anda harus memfilter elemen sumber sebelum atau sesudah dikelompokkan.
Jika predikat yang ditentukan tidak valid untuk elemen dalam sumber data, kesalahan waktu kompilasi akan dihasilkan. Ini adalah salah satu manfaat dari pemeriksaan jenis kuat yang disediakan oleh LINQ.
Pada waktu kompilasi, kata kunci where
dikonversi menjadi panggilan ke metode Operator Kueri Standar Where.