Операции квантификаторов
Обновлен: Ноябрь 2007
Квантификаторы возвращают значение Boolean, которое указывает, удовлетворяют ли условию некоторые или все элементы в последовательности.
На следующем рисунке показаны два различных квантификатора, примененные к двум различным исходным последовательностям. Первая операция проверяет, является ли один или более элементов буквой "А"; результатом является true. Вторая операция проверяет, являются ли все элементы буквой "А"; результатом является true.
Методы стандартных операторов запросов, которые выполняют операции квантификатора, перечислены в следующем разделе.
Методы
Имя метода |
Описание |
Синтаксис выражения запроса C# |
Синтаксис выражения запроса Visual Basic |
Дополнительные сведения |
---|---|---|---|---|
All |
Определяет, все ли элементы последовательности удовлетворяют условию. |
Неприменимо. |
Aggregate … In … Into All(…) |
|
Any |
Определяет, удовлетворяют ли некоторые элементы последовательности условию. |
Неприменимо. |
Aggregate … In … Into Any() |
|
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 |
См. также
Задачи
Основные понятия
Общие сведения о стандартных операторах запроса