Where (Cláusula, Visual Basic)

Especifica una condición de filtrado de una consulta.

Sintaxis

Where condition  

Partes

condition
Necesario. Expresión que determina si los valores del elemento actual de la colección se incluyen en la colección de salida. La expresión debe evaluarse como un valor Boolean o el equivalente de un valor Boolean. Si la condición se evalúa como True, el elemento se incluye en el resultado de la consulta; de lo contrario, se excluye.

Comentarios

La cláusula Where permite filtrar los datos de la consulta seleccionando solo los elementos que cumplen determinados criterios. Los elementos cuyos valores hacen que la cláusula Where se evalúe como True se incluyen en el resultado de la consulta; los restantes elementos se excluyen. La expresión que se usa en una cláusula Where debe evaluarse como Boolean o el equivalente de Boolean, como un entero que se evalúa como False cuando su valor es cero. Para combinar varias expresiones en una cláusula Where, se usan operadores lógicos como And, Or, AndAlso, OrElse, Is y IsNot.

De forma predeterminada, las expresiones de consulta no se evalúan hasta que se accede a ellas (por ejemplo, cuando están enlazadas a datos o se recorren en un bucle For). En consecuencia, la cláusula Where no se evalúa hasta que se accede a la consulta. Si tiene valores externos a la consulta que se usen en la cláusula Where, asegúrese de que se usa el valor adecuado en la cláusula Where en el momento en que se ejecuta la consulta. Para más información sobre la ejecución de consultas, vea Escritura de la primera consulta con LINQ.

Puede llamar a funciones dentro de una cláusula Where para realizar cualquier cálculo u operación en un valor del elemento actual de la colección. Si llama a una función en una cláusula Where, puede hacer que la consulta se ejecute en cuanto se define, en lugar de cuando se accede a ella. Para más información sobre la ejecución de consultas, vea Escritura de la primera consulta con LINQ.

Ejemplo 1

En la expresión de consulta siguiente, se usa una cláusula From para declarar una variable de rango cust para cada objeto Customer en la colección customers. La cláusula Where usa la variable de rango para restringir la salida a los clientes de la región especificada. El bucle For Each muestra el nombre de la empresa de cada cliente en el resultado de la consulta.

Sub DisplayCustomersForRegion(ByVal customers As List(Of Customer),
                              ByVal region As String)

    Dim customersForRegion = From cust In customers
                             Where cust.Region = region

    For Each cust In customersForRegion
        Console.WriteLine(cust.CompanyName)
    Next
End Sub

Ejemplo 2

En el ejemplo siguiente se usan los operadores lógicos And y Or en la cláusula Where.

Private Sub DisplayElements()
    Dim elements As List(Of Element) = BuildList()

    ' Get a list of elements that have an atomic number from 12 to 14,
    ' or that have a name that ends in "r".
    Dim subset = From theElement In elements
                 Where (theElement.AtomicNumber >= 12 And theElement.AtomicNumber < 15) _
                 Or theElement.Name.EndsWith("r")
                 Order By theElement.Name

    For Each theElement In subset
        Console.WriteLine(theElement.Name & " " & theElement.AtomicNumber)
    Next

    ' Output:
    '  Aluminum 13
    '  Magnesium 12
    '  Silicon 14
    '  Sulfur 16
End Sub

Private Function BuildList() As List(Of Element)
    Return New List(Of Element) From
        {
            {New Element With {.Name = "Sodium", .AtomicNumber = 11}},
            {New Element With {.Name = "Magnesium", .AtomicNumber = 12}},
            {New Element With {.Name = "Aluminum", .AtomicNumber = 13}},
            {New Element With {.Name = "Silicon", .AtomicNumber = 14}},
            {New Element With {.Name = "Phosphorous", .AtomicNumber = 15}},
            {New Element With {.Name = "Sulfur", .AtomicNumber = 16}}
        }
End Function

Public Class Element
    Public Property Name As String
    Public Property AtomicNumber As Integer
End Class

Consulte también