Share via


Operaciones cuantificadoras

Actualización: noviembre 2007

Las operaciones cuantificadoras devuelven un valor Boolean que indica si algunos o todos los elementos de una secuencia satisfacen una condición.

La ilustración siguiente muestra dos operaciones cuantificadoras diferentes en dos secuencias de origen diferentes. La primera operación pregunta si uno o varios de los elementos son el carácter 'A', y el resultado es true. La segunda operación pregunta si todos los elementos son el carácter 'A', y el resultado es true.

Operaciones cuantificadoras en LINQ

Los métodos de operador de consulta estándar que realizan operaciones cuantificadoras se enumeran en la sección siguiente.

Métodos

Nombre del método

Description

Sintaxis de las expresiones de consulta de C#

Sintaxis de las expresiones de consulta de Visual Basic

Más información

All

Determina si todos los elementos de una secuencia satisfacen una condición.

No es aplicable

Aggregate … In … Into All(…)

Enumerable.All<TSource>

Queryable.All<TSource>

Any

Determina si alguno de los elementos de una secuencia satisface una condición.

No es aplicable

Aggregate … In … Into Any()

Enumerable.Any

Queryable.Any

Contains

Determina si una secuencia contiene un elemento especificado.

No es aplicable

No es aplicable

Enumerable.Contains

Queryable.Contains

Ejemplos de sintaxis de expresiones de consulta

En estos ejemplos se utiliza la cláusula Aggregate en Visual Basic como parte de la condición de filtrado de una consulta LINQ.

En el ejemplo siguiente se utiliza la cláusula Aggregate y el método de extensión All<TSource> para devolver de una colección las personas cuyos animales domésticos tienen más de una edad especificada.

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

En el ejemplo siguiente se utiliza la cláusula Aggregate y el método de extensión Any para devolver de una colección las personas que tienen por lo menos un animal doméstico que es mayor que una edad especificada.

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

Información adicional sobre cómo realizar operaciones cuantificadoras

Vea también

Tareas

Cómo: Especificar dinámicamente filtros con predicado en tiempo de ejecución (Guía de programación de C#)

Conceptos

Información general sobre operadores de consulta estándar

Referencia

Aggregate (Cláusula, Visual Basic)

System.Linq