确定序列中的任何元素或所有元素是否满足条件

如果序列中的所有元素都满足条件,则 All 运算符返回 true

如果序列中的任何元素满足条件,运算符 Anytrue 返回。

示例 1

以下示例返回至少一个订单的客户序列。 如果给定的Where具有任何/,那么wheretrueCustomer子句的计算结果为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

示例 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# 示例返回一系列客户,其订单以 ShipCity “C”开头。 退货中还包括没有订单的客户。 (根据设计,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}");
    }
}

另请参阅