Where – klauzule (Visual Basic)
Určuje podmínku filtrování dotazu.
Syntaxe
Where condition
Součástky
condition
Povinný: Výraz, který určuje, zda jsou hodnoty aktuální položky v kolekci zahrnuty do výstupní kolekce. Výraz se musí vyhodnotit na Boolean
hodnotu nebo ekvivalent Boolean
hodnoty. Pokud se podmínka vyhodnotí jako True
, prvek je součástí výsledku dotazu; jinak je prvek vyloučen z výsledku dotazu.
Poznámky
Klauzule Where
umožňuje filtrovat data dotazu výběrem pouze prvků, které splňují určitá kritéria. Prvky, jejichž hodnoty způsobí Where
, že klauzule se vyhodnotí True
jako zahrnutá do výsledku dotazu; ostatní prvky jsou vyloučeny. Výraz, který se používá v Where
klauzuli, se musí vyhodnotit na Boolean
hodnotu nebo ekvivalent výrazu Boolean
, například integer, který se vyhodnotí jako False
hodnota nula. V klauzuli můžete kombinovat více výrazů pomocí logických Where
operátorů, jako And
jsou , Or
, AndAlso
, OrElse
, Is
a IsNot
.
Ve výchozím nastavení se výrazy dotazu nevyhodnocují, dokud se k nim nepřistupuje – například když jsou vázané na data nebo iterated ve smyčce For
. V důsledku toho se klauzule nevyhodnocuje, Where
dokud se k dotazu nepřistupuje. Pokud máte hodnoty externí pro dotaz, který se používá v Where
klauzuli, ujistěte se, že se příslušná hodnota použije v Where
klauzuli v době, kdy se dotaz spustí. Další informace o provádění dotazů naleznete v tématu Zápis prvního dotazu LINQ.
Funkce v rámci Where
klauzule můžete volat k provedení výpočtu nebo operace s hodnotou z aktuálního prvku v kolekci. Volání funkce v Where
klauzuli může způsobit, že se dotaz spustí okamžitě, když je definován místo přístupu. Další informace o provádění dotazů naleznete v tématu Zápis prvního dotazu LINQ.
Příklad 1
Následující výraz dotazu používá From
klauzuli k deklaraci proměnné cust
rozsahu pro každý Customer
objekt v kolekci customers
. Klauzule Where
používá proměnnou rozsahu k omezení výstupu pro zákazníky ze zadané oblasti. Smyčka For Each
zobrazí název společnosti pro každého zákazníka ve výsledku dotazu.
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
Příklad 2
Následující příklad používá And
a Or
logické operátory v klauzuli 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