Partager via


where, clause (référence C#)

La where clause est utilisée dans une expression de requête pour spécifier les éléments de la source de données qui seront retournés dans l’expression de requête. Elle applique une condition booléenne (prédicat) à chaque élément source (référencé par la variable de plage) et retourne celles pour lesquelles la condition spécifiée est vraie. Une seule expression de requête peut contenir plusieurs where clauses et une seule clause peut contenir plusieurs sous-expressions de prédicat.

Exemple 1

Dans l’exemple suivant, la where clause filtre tous les nombres, sauf ceux qui sont inférieurs à cinq. Si vous supprimez la where clause, tous les nombres de la source de données sont retournés. L’expression num < 5 est le prédicat appliqué à chaque élément.

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

Exemple 2

Dans une clause uniquewhere, vous pouvez spécifier autant de prédicats que nécessaire à l’aide des opérateurs et ||des &&. Dans l’exemple suivant, la requête spécifie deux prédicats pour sélectionner uniquement les nombres pairs inférieurs à cinq.

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

Exemple 3

Une where clause peut contenir une ou plusieurs méthodes qui retournent des valeurs booléennes. Dans l’exemple suivant, la where clause utilise une méthode pour déterminer si la valeur actuelle de la variable de plage est égale ou impaire.

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

Remarques

La where clause est un mécanisme de filtrage. Elle peut être positionnée presque n’importe où dans une expression de requête, sauf qu’elle ne peut pas être la première ou la dernière clause. Une where clause peut apparaître avant ou après une clause de groupe selon que vous devez filtrer les éléments sources avant ou après leur regroupement.

Si un prédicat spécifié n’est pas valide pour les éléments de la source de données, une erreur au moment de la compilation se produit. Il s’agit d’un avantage de la vérification de type forte fournie par LINQ.

Au moment de la compilation, le where mot clé est converti en appel à la Where méthode Opérateur de requête standard.

Voir aussi