Sdílet prostřednictvím


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.

LINQ Quantifier Operations

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

Viz také