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


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

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

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

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

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

Методы

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

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

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

Queryable.Contains

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

В этих примерах предложение Aggregate в языке Visual Basic используется как часть условия фильтрации в запросе 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

См. также