Cenni preliminari sugli operatori di query standard (C#)

Gli operatori di query standard sono metodi che costituiscono il modello LINQ. La maggior parte di questi metodi agisce sulle sequenze. Una sequenza è un oggetto il cui tipo implementa l'interfaccia IEnumerable<T> o l'interfaccia IQueryable<T>. Gli operatori di query standard forniscono le funzionalità di query che includono filtro, proiezione, aggregazione, ordinamento e altro ancora.

Sono disponibili due set di operatori di query standard LINQ: uno che opera su oggetti di tipo IEnumerable<T> , un altro che opera su oggetti di tipo IQueryable<T> . I metodi che costituiscono ogni set sono membri statici delle classi Enumerable e Queryable, rispettivamente. Vengono definiti come metodi di estensione del tipo su cui agiscono. I metodi di estensione possono essere chiamati usando la sintassi del metodo statico o la sintassi del metodo di istanza.

Inoltre, molti metodi degli operatori query standard agiscono su tipi diversi da quelli basati su IEnumerable<T> o IQueryable<T>. Il tipo Enumerable definisce questi due diversi metodi che agiscono entrambi su oggetti di tipo IEnumerable. Questi metodi, Cast<TResult>(IEnumerable) e OfType<TResult>(IEnumerable), consentono l'esecuzione di query su una Collection senza parametri o non generica nel modello LINQ A tale scopo, crea una raccolta fortemente tipizzata di oggetti. La classe Queryable definisce due metodi simili, Cast<TResult>(IQueryable) e OfType<TResult>(IQueryable), che agiscono su oggetti di tipo Queryable.

Gli operatori di query standard presentano una durata di esecuzione diversa, a seconda che restituiscano un valore singleton o una sequenza di valori. Questi metodi che restituiscono un valore singleton, ad esempio Average e Sum, vengono eseguiti immediatamente. I metodi che restituiscono una sequenza rinviano l'esecuzione della query e restituiscono un oggetto enumerabile.

Per i metodi che operano su raccolte in memoria, ovvero i metodi che estendono IEnumerable<T> , l'oggetto enumerabile restituito acquisisce gli argomenti passati al metodo. Quando l'oggetto viene enumerato, viene utilizzata la logica dell'operatore query e vengono restituiti i risultati della query.

Al contrario, i metodi che estendono IQueryable<T> non implementano il comportamento delle query. Compilano un albero delle espressioni che rappresenta la query da eseguire. L'elaborazione delle query viene gestita dall'oggetto IQueryable<T> di origine.

Le chiamate ai metodi della query possono essere concatenate in una query, consentendo alle query di diventare arbitrariamente complesse.

Nell'esempio di codice seguente viene illustrato come usare gli operatori di query standard per ottenere informazioni su una sequenza.

string sentence = "the quick brown fox jumps over the lazy dog";  
// Split the string into individual words to create a collection.  
string[] words = sentence.Split(' ');  
  
// Using query expression syntax.  
var query = from word in words  
            group word.ToUpper() by word.Length into gr  
            orderby gr.Key  
            select new { Length = gr.Key, Words = gr };  
  
// Using method-based query syntax.  
var query2 = words.  
    GroupBy(w => w.Length, w => w.ToUpper()).  
    Select(g => new { Length = g.Key, Words = g }).  
    OrderBy(o => o.Length);  
  
foreach (var obj in query)  
{  
    Console.WriteLine("Words of length {0}:", obj.Length);  
    foreach (string word in obj.Words)  
        Console.WriteLine(word);  
}  
  
// This code example produces the following output:  
//  
// Words of length 3:  
// THE  
// FOX  
// THE  
// DOG  
// Words of length 4:  
// OVER  
// LAZY  
// Words of length 5:  
// QUICK  
// BROWN  
// JUMPS

Sintassi delle espressioni di query

Alcuni degli operatori di query standard usati più di frequente dispongono di sintassi dedicata delle parole chiave per i linguaggi C# e Visual Basic che consente di chiamare gli operatori come parte di un'*espressione di * query. Per altre informazioni sugli operatori di query standard con parole chiave dedicate e le relative sintassi, vedere Sintassi di espressione della query per operatori di query standard (C#).

Estensione degli operatori di query standard

È possibile estendere il set di operatori di query standard creando metodi specifici del dominio appropriati per la tecnologia o il dominio di destinazione. È possibile anche sostituire gli operatori di query standard con implementazioni personalizzate che forniscono servizi aggiuntivi, ad esempio la valutazione remota, la conversione delle query e l'ottimizzazione. Per un esempio, vedere AsEnumerable.

I collegamenti seguenti contengono articoli che forniscono informazioni aggiuntive sui diversi operatori di query standard in base alle funzionalità di.

Ordinamento dei dati (C#)

Operazioni sui set (C#)

Filtro di dati (C#)

Operazioni del quantificatore (C#)

Operazioni di proiezione (C#)

Partizionamento dei dati (C#)

Operazioni di join (C#)

Raggruppamento dei dati (C#)

Operazioni di generazione (C#)

Operazioni di uguaglianza (C#)

Operazioni sugli elementi (C#)

Conversione del tipo di dati (C#)

Operazioni di concatenazione (C#)

Operazioni di aggregazione (C#)

Vedere anche