Поделиться через


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

Обновлен: Ноябрь 2007

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

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

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

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

Методы

Имя метода

Описание

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

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

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

All

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

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

Aggregate … In … Into All(…)

Enumerable.All<TSource>

Queryable.All<TSource>

Any

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

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

Aggregate … In … Into Any()

Enumerable.Any

Queryable.Any

Contains

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

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

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

Enumerable.Contains

Queryable.Contains

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

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

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

Class Person
    Private _name As String
    Private _pets As Pet()

    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Public Property Pets() As Pet()
        Get
            Return _pets
        End Get
        Set(ByVal value As Pet())
            _pets = value
        End Set
    End Property
End Class

Class Pet
    Private _name As String
    Private _age As Integer

    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Public Property Age() As Integer
        Get
            Return _age
        End Get
        Set(ByVal value As Integer)
            _age = value
        End Set
    End Property
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
    Private _name As String
    Private _pets As Pet()

    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Public Property Pets() As Pet()
        Get
            Return _pets
        End Get
        Set(ByVal value As Pet())
            _pets = value
        End Set
    End Property
End Class

Class Pet
    Private _name As String
    Private _age As Integer

    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Public Property Age() As Integer
        Get
            Return _age
        End Get
        Set(ByVal value As Integer)
            _age = value
        End Set
    End Property
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

Дополнительные сведения о выполнении операций квантификаторов

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

См. также

Задачи

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

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

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

Ссылки

Статистическое предложение (Visual Basic)

System.Linq