Condividi tramite


Determinare se uno o tutti gli elementi di una sequenza soddisfano una condizione

L'operatore All restituisce true se tutti gli elementi di una sequenza soddisfano una condizione.

L'operatore Any restituisce true se un elemento in una sequenza soddisfa una condizione.

Esempio 1

Nell'esempio seguente viene restituita una sequenza di clienti con almeno un ordine. La clausola Where/where restituisce true se il Customer specificato ha un qualsiasi 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

Esempio 2

Il codice Visual Basic seguente determina l'elenco dei clienti che non hanno effettuato ordini e garantisce che per ogni cliente in tale elenco venga fornito un nome di contatto.

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

Esempio 3

L'esempio C# seguente restituisce una sequenza di clienti i cui ordini hanno un ShipCity che inizia con "C". Sono inclusi anche i clienti che non hanno effettuato ordini. Per impostazione predefinita, l'operatore All restituisce true per una sequenza vuota. I clienti senza ordini vengono eliminati nell'output della console usando l'operatore 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: {custObj.CustomerID}");
    foreach (Order ordObj in custObj.Orders)
    {
        Console.WriteLine($"\t OrderID: {ordObj.OrderID}; ShipCity: {ordObj.ShipCity}");
    }
}

Vedere anche