Операции квантификатора (Visual Basic)

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

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

LINQ Quantifier Operations

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

Методы

Имя метода Description Синтаксис выражения запроса Visual Basic Дополнительные сведения
Все Определяет, все ли элементы последовательности удовлетворяют условию. Aggregate … In … Into All(…) Enumerable.All

Queryable.All
Любое Определяет, удовлетворяют ли условию какие-либо элементы последовательности. Aggregate … In … Into Any() Enumerable.Any

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

Queryable.Contains

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

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

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

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

См. также