Freigeben über


Ermitteln, ob "Any" oder "All"-Elemente in einer Sequenz eine Bedingung erfüllen

Der All Operator gibt zurück true , wenn alle Elemente in einer Sequenz eine Bedingung erfüllen.

Der Any Operator gibt zurück true , wenn ein Element in einer Sequenz eine Bedingung erfüllt.

Beispiel 1

Im folgenden Beispiel wird eine Abfolge von Kunden zurückgegeben, die mindestens eine Bestellung haben. Die Where/where-Klausel wird bewertet als true, wenn der betreffende Customer eine beliebige Order aufweist.

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

Beispiel 2

Der folgende Visual Basic-Code bestimmt die Liste der Kunden, die keine Bestellungen aufgegeben haben, und stellt sicher, dass für jeden Kunden in dieser Liste ein Kontaktname angegeben wird.

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

Beispiel 3

Im folgenden C#-Beispiel wird eine Abfolge von Kunden zurückgegeben, deren Bestellungen ShipCity mit "C" beginnen. Auch in der Rücksendung enthalten sind Kunden, die keine Bestellungen haben. (Der All-Operator gibt gemäß Konstruktion true für eine leere Sequenz zurück.) Kunden ohne Bestellungen werden in der Konsolenausgabe mit dem Count-Operator eliminiert.

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}");
    }
}

Siehe auch