Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
where A lekérdezési kifejezés záradékával megadhatja, hogy az adatforrás mely elemeit adja vissza. Logikai feltételt (predikátumot) alkalmaz minden forráselemre (amelyre a tartományváltozó hivatkozik), és visszaadja azokat az elemeket, amelyekre a megadott feltétel igaz. Egyetlen lekérdezési kifejezés több where záradékot is tartalmazhat, és egyetlen záradék több predikátum-alkifejezést is tartalmazhat.
A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.
A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.
Jótanács
Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.
A következő példában a záradék az where ötnél kevesebb szám kivételével kiszűri az összes számot. Ha eltávolítja a where záradékot, a lekérdezés az adatforrás összes számát visszaadja. A kifejezés num < 5 az a predikátum, amelyet a lekérdezés az egyes elemekre alkalmaz.
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
Egyetlen where záradékon belül annyi predikátumot adhat meg, amennyi szükséges a &> és || az operátorok használatával. A következő példában a lekérdezés két predikátumot ad meg, hogy csak az ötnél kisebb páros számokat válassza ki.
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
A where záradékok tartalmazhatnak egy vagy több metódust, amelyek logikai értékeket adnak vissza. A következő példában a where záradék egy metódussal határozza meg, hogy a tartományváltozó aktuális értéke páros vagy páratlan-e.
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
Megjegyzések
A where záradék egy szűrési mechanizmus. A lekérdezési kifejezésekben szinte bárhol elhelyezheti, kivéve, hogy nem lehet az első vagy az utolsó záradék. A where záradékok a csoport záradéka előtt vagy után is megjelenhetnek attól függően, hogy a forráselemeket a csoportosítás előtt vagy után kell-e szűrni.
Ha olyan predikátumot ad meg, amely nem érvényes az adatforrás elemeire, a lekérdezés fordítási időt eredményez. Ez a hiba a LINQ által biztosított erős típusellenőrzés egyik előnye.
Fordításkor a rendszer a where kulcsszót a Where Standard Lekérdezéskezelő metódus hívásává alakítja.