Delen via


where-component (C#-verwijzing)

Gebruik de where component in een query-expressie om op te geven welke elementen uit de gegevensbron moeten worden geretourneerd. Er wordt een Booleaanse voorwaarde (predicaat) toegepast op elk bronelement (waarnaar wordt verwezen door de bereikvariabele) en retourneert deze elementen waarvoor de opgegeven voorwaarde waar is. Eén query-expressie kan meerdere where componenten bevatten en één component kan meerdere predicaatsubexpressies bevatten.

De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.

De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.

Aanbeveling

Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.

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, retourneert de query alle getallen uit de gegevensbron. De expressie num < 5 is het predicaat dat de query op elk element van toepassing is.

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

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

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. U kunt deze bijna overal in een query-expressie plaatsen, behalve dat dit 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 deze zijn gegroepeerd.

Als u een predicaat opgeeft dat niet geldig is voor de elementen in de gegevensbron, resulteert de query in een compilatietijdfout. Deze fout is een voordeel van de sterke typecontrole die LINQ biedt.

Tijdens het compileren wordt het where trefwoord geconverteerd naar een aanroep naar de Where methode Standard Query Operator.

Zie ook