Panoramica degli operatori query standard (Visual Basic)

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 agisce sugli oggetti di tipo IEnumerable<T> e l'altro che agisce sugli 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. Ciò significa che 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 Questo avviene grazie alla creazione di una raccolta di oggetti fortemente tipizzata. 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.

Nel caso dei metodi che agiscono sulle Collection 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.

I metodi che estendono IQueryable<T> non implementano invece il comportamento delle query, ma 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.

Dim sentence = "the quick brown fox jumps over the lazy dog"
' Split the string into individual words to create a collection.
Dim words = sentence.Split(" "c)

Dim query = From word In words
            Group word.ToUpper() By word.Length Into gr = Group
            Order By Length _
            Select Length, GroupedWords = gr

Dim output As New System.Text.StringBuilder
For Each obj In query
    output.AppendLine(String.Format("Words of length {0}:", obj.Length))
    For Each word As String In obj.GroupedWords
        output.AppendLine(word)
    Next
Next

'Display the output
MsgBox(output.ToString())

' 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 (Visual Basic).

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 riportati di seguito consentono di passare ad argomenti che forniscono informazioni aggiuntive sui vari operatori di query standard in base alla funzionalità.

Vedi anche