次の方法で共有


方法 : シーケンスのすべての要素が条件を満たしているかどうかを確認する (LINQ to SQL)

更新 : November 2007

All<TSource> 演算子は、シーケンスのすべての要素が条件を満たす場合に true を返します。

Any 演算子は、シーケンスの要素が 1 つでも条件を満たす場合に true を返します。

使用例

次の例では、最低 1 件の注文がある顧客のシーケンスを返します。Where/where 句は、指定された Customer に Order がある場合に true に評価されます。

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;

次の 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

次の C# コードでは、注文の ShipCity が "C" で始まる顧客のシーケンスを返します。注文のない顧客も結果に含まれます。(All<TSource> 演算子はシーケンスが空の場合に 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: {0}", custObj.CustomerID);
    foreach (Order ordObj in custObj.Orders)
    {
        Console.WriteLine("\t OrderID: {0}; ShipCity: {1}",
            ordObj.OrderID, ordObj.ShipCity);
    }
}

参照

その他の技術情報

クエリの例 (LINQ to SQL)