All演算子は、シーケンス内のすべての要素が条件を満たす場合にtrue
を返します。
Any演算子は、シーケンス内の要素が条件を満たす場合にtrue
を返します。
例 1
次の例では、少なくとも 1 つの注文を持つ顧客のシーケンスを返します。 指定したCustomer
にOrder
がある場合、Where
/where
句はtrue
に評価されます。
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
例 2
次の Visual Basic コードは、注文していない顧客の一覧を決定し、その一覧内のすべての顧客に対して連絡先名が指定されていることを確認します。
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
例 3
次の C# の例では、注文が "C" で始まる ShipCity
を持つ一連の顧客を返します。 返品には、注文のない顧客も含まれます。 (仕様上、 All 演算子は空のシーケンスの true
を返します)。注文がないお客様は、 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}");
}
}