Операции квантификатора (Visual Basic)
Квантификаторы возвращают значение Boolean, которое указывает, удовлетворяют ли условию некоторые или все элементы в последовательности.
На приведенном ниже рисунке показаны два различных квантификатора, примененные к двум разным исходным последовательностям. Первая операция спрашивает, является ли любой из элементов символом A. Вторая операция спрашивает, являются ли все элементы символом A. Оба метода возвращаются true
в этом примере.
В следующем разделе перечислены методы стандартных операторов запросов, которые выполняют операции с использованием квантификаторов.
Методы
Имя метода | 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