Classificazione degli operatori di query standard in base alla modalità di esecuzione
Aggiornamento: novembre 2007
Le implementazioni LINQ to Objects dei metodi degli operatori di query standard vengono eseguite in due modalità principali: immediata o posticipata. Gli operatori di query che utilizzano l'esecuzione posticipata possono essere ulteriormente suddivisi in due categorie: di flusso e non di flusso. Se si conosce la modalità di esecuzione dei vari operatori di query, può risultare utile comprendere i risultati che si ottengono da una determinata query, soprattutto nel caso in cui l'origine dati venga modificata o se si crea una query su un'altra query. In questo argomento è riportata una classificazione degli operatori di query standard in base alla relativa modalità di esecuzione.
Modalità di esecuzione
Immediata
Per esecuzione immediata si intende che l'origine dati viene letta e l'operazione viene eseguita in corrispondenza del punto di codice in cui viene dichiarata la query. Tutti gli operatori di query standard che restituiscono un singolo risultato non enumerabile vengono eseguiti immediatamente.
Posticipata
Per esecuzione posticipata si intende che l'operazione non viene eseguita in corrispondenza del punto di codice in cui viene dichiarata la query, ma soltanto quando viene enumerata la variabile della query, ad esempio tramite l'istruzione foreach (For Each in Visual Basic). Pertanto, i risultati dell'esecuzione della query dipendono dal contenuto dell'origine dati nel momento in cui la query viene eseguita anziché quando viene definita. Se la variabile della query viene enumerata più volte, i risultati possono variare ogni volta. Quasi tutti gli operatori di query standard il cui tipo restituito è IEnumerable<T> o IOrderedEnumerable<TElement> vengono eseguiti in modalità posticipata.
Gli operatori che utilizzano l'esecuzione posticipata possono essere ulteriormente classificati come di flusso o non di flusso.
Di flusso
Gli operatori di flusso non devono necessariamente leggere tutti i dati di origine prima di produrre elementi. Al momento dell'esecuzione, un operatore di flusso esegue la propria operazione su ogni elemento di origine che viene letto e produce l'elemento, se appropriato. Un operatore di flusso continua a leggere gli elementi di origine finché non può essere prodotto un elemento risultante. Pertanto, per produrre un unico elemento risultante è possibile che vengano letti più elementi di origine.
Non di flusso
Gli operatori non di flusso devono leggere tutti i dati di origine prima di produrre un elemento risultante. Rientrano in questa categoria operazioni quale ordinamento o raggruppamento. Al momento dell'esecuzione, gli operatori di query non di flusso leggono tutti i dati di origine, li inseriscono in una struttura di dati, eseguono l'operazione e producono gli elementi risultanti.
Tabella di classificazione
Nella tabella seguente è riportata una classificazione di tutti gli operatori di query standard in base al relativo metodo di esecuzione.
Nota: |
---|
Se un operatore è contrassegnato in due colonne, significa che nell'operazione sono coinvolte due sequenze di input, ognuna delle quali valutata in modo diverso. In questi casi, viene sempre valutata la prima sequenza nell'elenco di parametri in modalità posticipata non di flusso. |
Operatore di query standard |
Tipo restituito |
Esecuzione immediata |
Esecuzione di flusso posticipata |
Esecuzione non di flusso posticipata |
---|---|---|---|---|
TSource |
X |
|
|
|
X |
|
|
||
X |
|
|
||
X |
|
|||
Singolo valore numerico |
X |
|
|
|
|
X |
|
||
|
X |
|
||
X |
|
|
||
X |
|
|
||
|
X |
|
||
|
X |
|
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
X |
|
|
||
X |
X |
|||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
|
|
X |
||
X |
X |
|||
X |
X |
|||
X |
X |
|||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
X |
|
|
||
Singolo valore numerico, TSource o TResult |
X |
|
|
|
Singolo valore numerico, TSource o TResult |
X |
|
|
|
|
X |
|
||
|
|
X |
||
|
|
X |
||
|
X |
|
||
|
X |
|
||
|
|
X |
||
|
X |
|
||
|
X |
|
||
X |
|
|
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
|
X |
|
||
|
X |
|
||
Singolo valore numerico |
X |
|
|
|
|
X |
|
||
|
X |
|
||
|
|
X |
||
|
|
X |
||
Matrice di TSource |
X |
|
|
|
X |
|
|
||
X |
|
|
||
X |
|
|
||
|
X |
|
||
|
X |
|
Vedere anche
Concetti
Cenni preliminari sugli operatori di query standard
Sintassi di espressione della query per operatori di query standard