where-component (C#-verwijzing)
De where
component wordt gebruikt in een query-expressie om op te geven welke elementen uit de gegevensbron worden geretourneerd in de query-expressie. Er wordt een Booleaanse voorwaarde (predicaat) toegepast op elk bronelement (waarnaar wordt verwezen door de bereikvariabele) en wordt geretourneerd waarvoor de opgegeven voorwaarde waar is. Eén query-expressie kan meerdere where
componenten bevatten en één component kan meerdere predicaatsubexpressies bevatten.
Voorbeeld 1
In het volgende voorbeeld worden met de where
component alle getallen gefilterd, behalve getallen die kleiner zijn dan vijf. Als u de where
component verwijdert, worden alle getallen uit de gegevensbron geretourneerd. De expressie num < 5
is het predicaat dat op elk element wordt toegepast.
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
Voorbeeld 2
Binnen één where
component kunt u zoveel predicaten opgeven als nodig is met behulp van de && en || operators. In het volgende voorbeeld geeft de query twee predicaten op om alleen de even getallen te selecteren die kleiner zijn dan vijf.
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
Voorbeeld 3
Een where
component kan een of meer methoden bevatten die Booleaanse waarden retourneren. In het volgende voorbeeld gebruikt de where
component een methode om te bepalen of de huidige waarde van de bereikvariabele even of oneven is.
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
Opmerkingen
De where
component is een filtermechanisme. Deze kan bijna overal in een query-expressie worden geplaatst, behalve dat het niet de eerste of laatste component kan zijn. Een where
component kan worden weergegeven vóór of na een groepscomponent , afhankelijk van of u de bronelementen moet filteren voor of nadat ze zijn gegroepeerd.
Als een opgegeven predicaat niet geldig is voor de elementen in de gegevensbron, resulteert een compilatietijdfout. Dit is een voordeel van de sterke typecontrole van LINQ.
Tijdens het compileren wordt het where
trefwoord geconverteerd naar een aanroep naar de Where methode Standard Query Operator.