Compartir a través de


Cómo: Determinar si algún elemento o todos los elementos de una secuencia cumplen una condición (LINQ to SQL)

El operador All<TSource> devuelve true si todos los elementos de una secuencia satisfacen una condición.

El operador Any devuelve true si cualquier elemento de una secuencia satisface una condición.

Ejemplo

En el ejemplo siguiente se devuelve una secuencia de clientes que tienen por lo menos un pedido. La cláusula Where/where se evalúa como true si el Customer dado tiene cualquier Order.

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

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

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

En el ejemplo de C# siguiente se devuelve una secuencia de clientes cuyos pedidos tienen un valor de ShipCity que empieza por "C". En el resultado devuelto se incluyen también los clientes que no tienen pedidos. (Por diseño, el operador All<TSource> devuelve true para una secuencia vacía.) Los clientes sin pedidos se eliminan en los resultados 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: {0}", custObj.CustomerID);
    foreach (Order ordObj in custObj.Orders)
    {
        Console.WriteLine("\t OrderID: {0}; ShipCity: {1}",
            ordObj.OrderID, ordObj.ShipCity);
    }
}

Vea también

Otros recursos

Ejemplos de consultas (LINQ to SQL)