Partager via


Comment : déterminer si certains ou tous les éléments d'une séquence remplissent une condition

L'opérateur All retourne true si tous les éléments d'une séquence remplissent une condition.

L'opérateur Any retourne true si un élément d'une séquence remplit une condition.

Exemple 1

L'exemple suivant retourne une séquence de clients possédant au moins une commande. La clause Where/where prend la valeur true si le Customer donné possède une Order.

var OrdersQuery =
    from cust in db.Customers
    where cust.Orders.Any()
    select cust;
Dim OrdersQuery = _
    From cust In db.Customers _
    Where cust.Orders.Any() _
    Select cust

Exemple 2

Le code Visual Basic suivant détermine la liste des clients qui n'ont pas passé de commande et vérifie qu'un nom de contact est fourni pour chaque client de cette liste.

Public Sub ContactsAvailable()
    Dim db As New Northwnd("c:\northwnd.mdf")
    Dim result = _
        (From cust In db.Customers _
         Where Not cust.Orders.Any() _
         Select cust).All(AddressOf ContactAvailable)

    If result Then
        Console.WriteLine _
    ("All of the customers who have made no orders have a contact name")
    Else
        Console.WriteLine _
    ("Some customers who have made no orders have no contact name")
    End If
End Sub

Function ContactAvailable(ByVal contact As Object) As Boolean
    Dim cust As Customer = CType(contact, Customer)
    Return (cust.ContactTitle Is Nothing OrElse _
        cust.ContactTitle.Trim().Length = 0)
End Function

Exemple 3

L'exemple C# suivant retourne une séquence de clients dont la ShipCity des commandes commence par la lettre C. Il retourne également les clients qui n'ont pas de commandes. (De par sa conception, l’opérateur All retourne true pour une séquence vide.) Les clients qui n’ont pas de commande sont supprimés de la sortie de la console à l’aide de l’opérateur Count.

var custEmpQuery =
    from cust in db.Customers
    where cust.Orders.All(o => o.ShipCity.StartsWith("C"))
    orderby cust.CustomerID
    select cust;

foreach (Customer custObj in custEmpQuery)
{
    if (custObj.Orders.Count > 0)
        Console.WriteLine("CustomerID: {0}", custObj.CustomerID);
    foreach (Order ordObj in custObj.Orders)
    {
        Console.WriteLine("\t OrderID: {0}; ShipCity: {1}",
            ordObj.OrderID, ordObj.ShipCity);
    }
}

Voir aussi