Compartilhar via


Determinar se qualquer elemento ou todos os elementos em uma sequência satisfazem uma condição

O All operador retornará true se todos os elementos em uma sequência atenderem a uma condição.

O Any operador retornará true se qualquer elemento em uma sequência atender a uma condição.

Exemplo 1

O exemplo a seguir retorna uma sequência de clientes que têm pelo menos um pedido. A Where/where cláusula será avaliada como true se o determinado Customer tiver algum 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

Exemplo 2

O código do Visual Basic a seguir determina a lista de clientes que não fizeram pedidos e garante que, para cada cliente nessa lista, um nome de contato seja fornecido.

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

Exemplo 3

O exemplo de C# a seguir retorna uma sequência de clientes cujos pedidos têm um ShipCity começo com "C". Também estão incluídos no retorno clientes que não têm pedidos. ** Por padrão, o operador All retorna true para uma sequência vazia. Os clientes sem pedidos são eliminados na saída do console usando o 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 também