Операции квантификаторов

Квантификаторы возвращают значение Boolean, которое указывает, удовлетворяют ли условию некоторые или все элементы в последовательности.

На следующем рисунке показаны два различных квантификатора, примененные к двум различным исходным последовательностям. Первая операция проверяет, является ли один или более элементов буквой "А"; результатом является true. Вторая операция проверяет, являются ли все элементы буквой "А"; результатом является true.

Операции, использующие кванторы LINQ

Методы стандартных операторов запросов, которые выполняют операции квантификатора, перечислены в следующем разделе.

Методы

Имя метода

Описание

Синтаксис выражения запроса C#

Синтаксис выражения запроса Visual Basic

Дополнительные сведения

Все

Определяет, все ли элементы последовательности удовлетворяют условию.

Неприменимо.

Aggregate … In … Into All(…)

Enumerable.All<TSource>

Queryable.All<TSource>

Any

Определяет, удовлетворяют ли некоторые элементы последовательности условию.

Неприменимо.

Aggregate … In … Into Any()

Enumerable.Any

Queryable.Any

Содержит

Проверяет, содержит ли последовательность указанный элемент.

Неприменимо.

Неприменимо.

Enumerable.Contains

Queryable.Contains

Примеры синтаксиса выражений запроса

В этих примерах предложение Aggregate в Visual Basic используется как часть условия фильтрации в запросе LINQ.

В следующем примере предложение Aggregate и метод расширения All<TSource> используются для возвращения из коллекции тех людей, все питомцы которых старше заданного возраста.

Class Person
    Public Property Name As String
    Public Property Pets As Pet()
End Class

Class Pet
    Public Property Name As String
    Public Property Age As Integer
End Class

Sub All()
    Dim barley As New Pet With {.Name = "Barley", .Age = 4}
    Dim boots As New Pet With {.Name = "Boots", .Age = 1}
    Dim whiskers As New Pet With {.Name = "Whiskers", .Age = 6}
    Dim bluemoon As New Pet With {.Name = "Blue Moon", .Age = 9}
    Dim daisy As New Pet With {.Name = "Daisy", .Age = 3}

    Dim charlotte As New Person With {.Name = "Charlotte", .Pets = New Pet() {barley, boots}}
    Dim arlene As New Person With {.Name = "Arlene", .Pets = New Pet() {whiskers}}
    Dim rui As New Person With {.Name = "Rui", .Pets = New Pet() {bluemoon, daisy}}

    ' Create the list of Person objects that will be queried.
    Dim people As New System.Collections.Generic.List(Of Person)(New Person() {charlotte, arlene, rui})

    Dim query = From pers In people 
                Where (Aggregate pt In pers.Pets Into All(pt.Age > 2)) 
                Select pers.Name

    Dim sb As New System.Text.StringBuilder()
    For Each name As String In query
        sb.AppendLine(name)
    Next

    ' Display the results.
    MsgBox(sb.ToString())

    ' This code produces the following output:

    ' Arlene
    ' Rui

End Sub

Следующий пример использует предложение Aggregate и метод расширения Any для возвращения из коллекции тех людей, хотя бы один из питомцев которых старше заданного возраста.

Class Person
    Public Property Name As String
    Public Property Pets As Pet()
End Class

Class Pet
    Public Property Name As String
    Public Property Age As Integer
End Class

Sub Any()
    Dim barley As New Pet With {.Name = "Barley", .Age = 4}
    Dim boots As New Pet With {.Name = "Boots", .Age = 1}
    Dim whiskers As New Pet With {.Name = "Whiskers", .Age = 6}
    Dim bluemoon As New Pet With {.Name = "Blue Moon", .Age = 9}
    Dim daisy As New Pet With {.Name = "Daisy", .Age = 3}

    Dim charlotte As New Person With {.Name = "Charlotte", .Pets = New Pet() {barley, boots}}
    Dim arlene As New Person With {.Name = "Arlene", .Pets = New Pet() {whiskers}}
    Dim rui As New Person With {.Name = "Rui", .Pets = New Pet() {bluemoon, daisy}}

    ' Create the list of Person objects that will be queried.
    Dim people As New System.Collections.Generic.List(Of Person)(New Person() {charlotte, arlene, rui})

    Dim query = From pers In people 
                Where (Aggregate pt In pers.Pets Into Any(pt.Age > 7)) 
                Select pers.Name

    Dim sb As New System.Text.StringBuilder()
    For Each name As String In query
        sb.AppendLine(name)
    Next

    ' Display the results.
    MsgBox(sb.ToString())

    ' This code produces the following output:

    ' Rui

End Sub

См. также

Задачи

Практическое руководство. Динамическое определение фильтров предикатов во время выполнения (Руководство по программированию на C#)

Практическое руководство. Запрос к предложениям, содержащим указанный набор слов (LINQ)

Ссылки

Предложение Aggregate (Visual Basic)

System.Linq

Основные понятия

Общие сведения о стандартных операторах запроса