Bestimmen, ob ein Element oder alle Elemente einer Sequenz eine Bedingung erfüllen
Der All-Operator gibt true
zurück, wenn alle Elemente in einer Sequenz eine Bedingung erfüllen.
Der Any-Operator gibt true
zurück, wenn ein beliebiges Element in einer Sequenz eine Bedingung erfüllt.
Beispiel 1
Im folgenden Beispiel wird eine Sequenz von Kunden mit mindestens einer Bestellung zurückgegeben. 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 ermittelt die Liste der Kunden, die noch keine Bestellungen übermittelt haben. Außerdem wird sichergestellt, dass für jeden Kunden in dieser Liste Kontaktinformationen angegeben werden.
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 Sequenz von Kunden zurückgegeben, deren Bestellungen einen ShipCity
(Lieferort) aufweisen, der mit "C" anfängt. Außerdem werden Kunden ohne bisherige Bestellungen zurückgegeben. (Der All-Operator gibt standardmäßig eine true
für eine leere Sequenz zurück.) Kunden ohne Bestellungen werden in der Konsolenausgabe mithilfe des Count
-Operators 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: {0}", custObj.CustomerID);
foreach (Order ordObj in custObj.Orders)
{
Console.WriteLine("\t OrderID: {0}; ShipCity: {1}",
ordObj.OrderID, ordObj.ShipCity);
}
}