Clausola where (Riferimento C#)
La clausola where
viene usata in un'espressione di query per specificare quali elementi dell'origine dati verranno restituiti nell'espressione di query. Viene applicata una condizione booleana (predicato) a ogni elemento di origine (a cui fa riferimento la variabile di intervallo) e viene restituita quella per cui la condizione specificata è vera. Una singola espressione di query può contenere più clausole where
e una singola clausola può contenere più sottoespressioni di predicato.
Esempio 1
Nell'esempio seguente la clausola where
esclude tutti i numeri tranne quelli minori di cinque. Se si rimuove la clausola where
, vengono restituiti tutti i numeri dell'origine dati. L'espressione num < 5
è il predicato che viene applicato a ogni elemento.
class WhereSample
{
static void Main()
{
// Simple data source. Arrays support IEnumerable<T>.
int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
// Simple query with one predicate in where clause.
var queryLowNums =
from num in numbers
where num < 5
select num;
// Execute the query.
foreach (var s in queryLowNums)
{
Console.Write(s.ToString() + " ");
}
}
}
//Output: 4 1 3 2 0
Esempio 2
All'interno di una singola clausola where
è possibile specificare tanti predicati quanti sono necessari usando gli operatori && e ||. Nell'esempio seguente la query specifica due predicati per selezionare solo i numeri pari minori di cinque.
class WhereSample2
{
static void Main()
{
// Data source.
int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
// Create the query with two predicates in where clause.
var queryLowNums2 =
from num in numbers
where num < 5 && num % 2 == 0
select num;
// Execute the query
foreach (var s in queryLowNums2)
{
Console.Write(s.ToString() + " ");
}
Console.WriteLine();
// Create the query with two where clause.
var queryLowNums3 =
from num in numbers
where num < 5
where num % 2 == 0
select num;
// Execute the query
foreach (var s in queryLowNums3)
{
Console.Write(s.ToString() + " ");
}
}
}
// Output:
// 4 2 0
// 4 2 0
Esempio 3
Una clausola where
può contenere uno o più metodi che restituiscono valori booleani. Nell'esempio seguente la clausola where
usa un metodo per determinare se il valore corrente della variabile di intervallo è pari o dispari.
class WhereSample3
{
static void Main()
{
// Data source
int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
// Create the query with a method call in the where clause.
// Note: This won't work in LINQ to SQL unless you have a
// stored procedure that is mapped to a method by this name.
var queryEvenNums =
from num in numbers
where IsEven(num)
select num;
// Execute the query.
foreach (var s in queryEvenNums)
{
Console.Write(s.ToString() + " ");
}
}
// Method may be instance method or static method.
static bool IsEven(int i) => i % 2 == 0;
}
//Output: 4 8 6 2 0
Osservazioni:
La clausola where
è un meccanismo di filtro. Può essere posizionata praticamente ovunque in un'espressione di query, ma non può essere la prima o l'ultima clausola. Una clausola where
la può apparire prima o dopo una clausola group a seconda se gli elementi di origine devono essere filtrati prima o dopo essere stati raggruppati.
Se un predicato specificato non è valido per gli elementi nell'origine dati, si verificherà un errore in fase di compilazione. Questo è un vantaggio del controllo dei tipi sicuro fornito da LINQ.
In fase di compilazione, la parola chiave where
viene convertita in una chiamata al metodo Where dell'operatore query standard.
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per