Compartir a través de


Determinar si alguno o todos los elementos de una secuencia cumplen una condición

El All operador devuelve true si todos los elementos de una secuencia cumplen una condición.

El Any operador devuelve true si algún elemento de una secuencia cumple una condición.

Ejemplo 1

En el ejemplo siguiente se devuelve una secuencia de clientes que tienen al menos un pedido. La Where/where cláusula se evalúa como true si el elemento especificado Customer tiene cualquier 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

Ejemplo 2

El siguiente código de Visual Basic determina la lista de clientes que no han realizado pedidos y garantiza que se proporcione un nombre de contacto para cada cliente de esa lista.

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

Ejemplo 3

En el siguiente ejemplo de C# se devuelve una secuencia de clientes cuyos pedidos tienen un ShipCity principio con "C". También se incluyen en la devolución los clientes que no tienen pedidos. (Por diseño, el operador All devuelve true para una secuencia vacía). Los clientes sin pedidos se eliminan en la salida de la consola mediante el operador 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}");
    }
}

Consulte también