Espressioni di query LINQ (Guida per programmatori C#)
LINQ (Language-Integrated Query) è il nome di un set di tecnologie basate sull'integrazione di funzionalità di query direttamente nel linguaggio C# (anche in Visual Basic e potenzialmente in qualsiasi altro linguaggio .NET).Con LINQ, una query è un costrutto di linguaggio di prima categoria, esattamente come le classi, i metodi, gli eventi e così via.
Per uno sviluppatore che scrive query, la parte "integrata nel linguaggio" più visibile di LINQ è l'espressione di query.Le espressioni di query sono scritte in una sintassi di query dichiarativa introdotta in C# 3.0.Tramite la sintassi di query, è persino possibile eseguire operazioni di filtro, ordinamento e raggruppamento complesse su origini dati con una quantità minima di codice.Si utilizzano gli stessi modelli di espressioni di query di base per eseguire query e trasformare dati in database SQL, set di dati ADO.NET, documenti e flussi XML e raccolte .NET.
Nell'esempio seguente viene illustrata l'operazione di query completa.L'operazione completa include la creazione di un'origine dati, la definizione dell'espressione di query e l'esecuzione della query in un 'istruzione foreach.
class LINQQueryExpressions
{
static void Main()
{
// Specify the data source.
int[] scores = new int[] { 97, 92, 81, 60 };
// Define the query expression.
IEnumerable<int> scoreQuery =
from score in scores
where score > 80
select score;
// Execute the query.
foreach (int i in scoreQuery)
{
Console.Write(i + " ");
}
}
}
// Output: 97 92 81
Per ulteriori informazioni sulle nozioni di base di LINQ in C#, vedere Nozioni di base su LINQ in C#.
Cenni preliminari sulle espressioni di query
Le espressioni di query possono essere utilizzate per eseguire una query e trasformare dati da qualsiasi origine dati abilitata per LINQ.Una sola query, ad esempio, è in grado di recuperare dati da un database SQL e di produrre un flusso XML come output.
Le espressioni di query sono facili da gestire perché utilizzano molti costrutti di linguaggio C# comuni.Per ulteriori informazioni, vedere Nozioni di base su LINQ in C#.
Le variabili in un'espressione di query sono tutte fortemente tipizzate, anche se in molti casi non è necessario specificare il tipo in modo esplicito perché il compilatore è in grado di dedurlo.Per ulteriori informazioni, vedere Relazioni tra i tipi nelle operazioni di query LINQ (C#).
Una query non viene eseguita finché non viene eseguita un'iterazione sulla variabile di query in un'istruzione foreach.Per ulteriori informazioni, vedere la classe Introduzione alle query LINQ (C#).
In fase di compilazione, le espressioni di query vengono convertite in chiamate al metodo dell'operatore query standard secondo le regole definite nella specifica C#.Le query che possono essere espresse utilizzando la sintassi della query possono essere espresse anche utilizzando la sintassi del metodo.Tuttavia, nella maggior parte dei casi la sintassi della query è più leggibile e concisa.Per ulteriori informazioni, vedere Specifiche del linguaggio C# e Cenni preliminari sugli operatori di query standard.
Come regola di scrittura delle query LINQ, si consiglia di utilizzare la sintassi della query ogni qualvolta è possibile e la sintassi del metodo ogni qualvolta è necessario.Tra le due diverse forme non esiste differenza semantica o a livello di prestazioni.Le espressioni di query sono spesso più leggibili delle espressioni equivalenti scritte nella sintassi del metodo.
Poiché per alcune operazioni di query, ad esempio Count o Max, non esiste una clausola dell'espressione di query equivalente, è necessario esprimerle come chiamata al metodo.La sintassi del metodo può essere combinata con la sintassi della query in svariati modi.Per ulteriori informazioni, vedere Sintassi di query e sintassi di metodi in LINQ (C#).
Le espressioni di query possono essere compilate in strutture ad albero dell'espressione o in delegati, a seconda del tipo al quale viene applicata la query.Le query IEnumerable<T> vengono compilate in delegati.Le query IQueryable e IQueryable<T> vengono compilate in strutture ad albero dell'espressione.Per ulteriori informazioni, vedere Strutture ad albero dell'espressione (C# e Visual Basic).
Nella tabella seguente sono elencati gli argomenti in cui sono disponibili informazioni aggiuntive sulle query ed esempi di codice per le attività comuni.
Argomento |
Descrizione |
---|---|
Nozioni fondamentali sulle espressioni di query (Guida per programmatori C#) |
Sono introdotti i concetti fondamentali sulle query e vengono forniti esempi di sintassi della query C#. |
Sono forniti esempi di diversi tipi di base di espressioni di query. |
|
Procedura: gestire le eccezioni nelle espressioni di query (Guida per programmatori C#) |
Come e quando spostare codice che genera potenziali eccezioni al di fuori di un'espressione di query. |
Procedura: popolare raccolte di oggetti da più origini (LINQ) |
Come utilizzare l'istruzione select per unire dati da origini diverse in un nuovo tipo. |
Procedura: raggruppare i risultati di una query (Guida per programmatori C#) |
Vengono illustrati diversi modi per utilizzare la clausola group. |
Procedura: creare un gruppo annidato (Guida per programmatori C#) |
Viene illustrato come creare gruppi annidati. |
Procedura: eseguire una sottoquery su un'operazione di raggruppamento (Guida per programmatori C#) |
Viene illustrato come utilizzare una sottoespressione in una query come origine dati per una query nuova. |
Procedura: raggruppare i risultati per chiavi contigue (Guida per programmatori C#) |
Viene illustrato come implementare un operatore di query standard thread-safe in grado di eseguire operazioni di raggruppamento in origini dati di flusso. |
Viene illustrato come specificare un numero arbitrario di valori da utilizzare nei confronti di uguaglianza in una clausola where. |
|
Procedura: archiviare i risultati di una query in memoria (Guida per programmatori C#) |
Viene illustrato come materializzare e archiviare i risultati della query senza utilizzare necessariamente un ciclo foreach. |
Procedura: ottenere una query da un metodo (Guida per programmatori C#) |
Viene illustrato come restituire variabili di query dai metodi e come passarle ai metodi come parametri di input. |
Procedura: eseguire operazioni di join personalizzate (Guida per programmatori C#) |
Viene illustrato come eseguire operazioni di join basate su qualsiasi tipo di funzione predicativa. |
Procedura: eseguire un join utilizzando una chiave composta (Guida per programmatori C#) |
Viene illustrato come unire due origini basate su più di una chiave corrispondente. |
Procedura: ordinare i risultati di una clausola join (Guida per programmatori C#) |
Viene illustrato come ordinare una sequenza prodotta da un'operazione di join. |
Procedura: eseguire degli inner join (Guida per programmatori C#) |
Viene illustrato come eseguire un inner join in LINQ. |
Procedura: eseguire dei join raggruppati (Guida per programmatori C#) |
Viene illustrato come produrre un join raggruppato in LINQ. |
Procedura: eseguire dei left outer join (Guida per programmatori C#) |
Viene illustrato come produrre un left outer join in LINQ. |
Procedura: gestire valori null nelle espressioni di query (Guida per programmatori C#) |
Viene illustrato come gestire valori null nelle query LINQ. |
Vedere anche
Attività
Procedura dettagliata: scrittura di query in C# (LINQ)
Concetti
Operazioni di query LINQ di base (C#)
Sintassi di query e sintassi di metodi in LINQ (C#)
Cenni preliminari sugli operatori di query standard
Altre risorse
LINQ (Language-Integrated Query)
Parole chiave di query (Riferimenti per C#)