Operace kvantifikátoru (Visual Basic)
Operace kvantifikátoru Boolean vrací hodnotu, která určuje, zda některé nebo všechny prvky v sekvenci splňují podmínku.
Následující obrázek znázorňuje dvě různé operace kvantifikátoru ve dvou různých zdrojových sekvencích. První operace se zeptá, jestli některý z prvků je znakem "A". Druhá operace se zeptá, jestli jsou všechny prvky znakem A. V tomto příkladu se vrátí true
obě metody.
Standardní metody operátoru dotazu, které provádějí operace kvantifikátoru, jsou uvedeny v následující části.
Metody
Název metody | Popis | Syntaxe výrazů dotazu jazyka Visual Basic | Další informace |
---|---|---|---|
Vše | Určuje, zda všechny prvky v sekvenci splňují podmínku. | Aggregate … In … Into All(…) |
Enumerable.All Queryable.All |
Všechny | Určuje, zda některé prvky v sekvenci splňují podmínku. | Aggregate … In … Into Any() |
Enumerable.Any Queryable.Any |
Contains | Určuje, zda sekvence obsahuje zadaný prvek. | Nevztahuje se. | Enumerable.Contains Queryable.Contains |
Příklady syntaxe výrazů dotazů
Tyto příklady používají klauzuli Aggregate
v jazyce Visual Basic jako součást podmínky filtrování v dotazu LINQ.
Následující příklad používá klauzuli Aggregate
a rozšiřující metodu All k vrácení z kolekce osob, jejichž domácí zvířata jsou starší než zadaný věk.
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
V dalším příkladu Aggregate
se klauzule a Any rozšiřující metoda vrátí z kolekce osoby, které mají aspoň jednoho domácího mazlíčka, který je starší než zadaný věk.
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