Partager via


Classification des opérateurs de requête standard en fonction de leur mode d'exécution

Mise à jour : novembre 2007

Les implémentations LINQ vers des objets des méthodes d'opérateur de requête standard s'exécutent dans l'une de deux manières principales : immédiate ou différée. Les opérateurs de requête qui utilisent l'exécution différée peuvent être divisés en deux catégories : diffusion en continu ou non continue. Si vous connaissez le mode d'exécution des différents opérateurs de requête, cela peut vous aider à comprendre les résultats obtenus à partir d'une requête donnée. C'est particulièrement vrai si la source de données change ou si vous générez une requête sur une autre requête. Cette rubrique classe les opérateurs de requête standard d'après leur manière d'exécution.

Modes d'exécution

Immédiat

L'exécution immédiate signifie que la source de données est lue et que l'opération est effectuée au point où la requête est déclarée dans le code. Tous les opérateurs de requête standard qui retournent un résultat unique et non énumérable s'exécutent immédiatement.

Différé

L'exécution différée signifie que l'opération n'est pas effectuée au point où la requête est déclarée dans le code. L'opération est effectuée uniquement lorsque la variable de requête est énumérée, par exemple à l'aide d'une instruction foreach (For Each dans Visual Basic). Cela signifie que les résultats de l'exécution de la requête dépendent du contenu de la source de données lorsque la requête est exécutée plutôt que lorsqu'elle est définie. Si la variable de requête est énumérée plusieurs fois, les résultats peuvent s'avérer différents chaque fois. Presque tous les opérateurs de requête standard dont le type de retour est IEnumerable<T> ou IOrderedEnumerable<TElement> s'exécutent de manière différée.

Les opérateurs de requête qui utilisent l'exécution différée peuvent en outre être classés comme diffusion en continu ou diffusion non continue.

Diffusion en continu

Les opérateurs diffusant en continu n'ont pas à lire toutes les données sources avant d'obtenir des éléments. Au moment de l'exécution, un opérateur diffusant en continu effectue son opération sur chaque élément source à mesure qu'il est lu et obtient l'élément si nécessaire. Ce type d'opérateur continue à lire des éléments source jusqu'à ce qu'un élément de résultat puisse être produit. Cela signifie que plusieurs éléments source peuvent être lus pour produire un élément de résultat.

Diffusion non continue

Les opérateurs qui ne diffusent pas en continu doivent lire toutes les données source avant qu'ils puissent obtenir un élément de résultat. Les opérations telles que le tri ou le regroupement font partie de cette catégorie. Pendant l'exécution, les opérateurs de requête non continue lisent toutes les données source, les placent dans une structure de données, puis effectuent l'opération et obtiennent les éléments de résultat.

Tableau de classification

Le tableau suivant classe chaque méthode d'opérateur de requête standard d'après son mode d'exécution.

Remarque :

Si un opérateur est marqué dans deux colonnes, deux séquences d'entrée sont impliquées dans l'opération et chacune d'elles est évaluée différemment. Dans ces cas, c'est toujours la première séquence dans la liste de paramètres qui est évaluée de façon différée, en continu.

Opérateur de requête standard

Type de retour

Exécution immédiate

Exécution en continu différée

Exécution non continue différée

Aggregate

TSource

X

 

 

All<TSource>

Boolean

X

 

 

Any

Boolean

X

 

 

AsEnumerable<TSource>

IEnumerable<T>

X

 

Average

Valeur numérique unique

X

 

 

Cast<TResult>

IEnumerable<T>

 

X

 

Concat<TSource>

IEnumerable<T>

 

X

 

Contains

Boolean

X

 

 

Count

Int32

X

 

 

DefaultIfEmpty

IEnumerable<T>

 

X

 

Distinct

IEnumerable<T>

 

X

 

ElementAt<TSource>

TSource

X

 

 

ElementAtOrDefault<TSource>

TSource

X

 

 

Empty<TResult>

IEnumerable<T>

X

 

 

Except

IEnumerable<T>

X

 X

First

TSource

X

 

 

FirstOrDefault

TSource

X

 

 

GroupBy

IEnumerable<T>

 

 

X

GroupJoin

IEnumerable<T>

X

Intersect

IEnumerable<T>

X

X

Join

IEnumerable<T>

X

X

Last

TSource

X

 

 

LastOrDefault

TSource

X

 

 

LongCount

Int64

X

 

 

Max

Valeur numérique unique, TSource ou TResult

X

 

 

Min

Valeur numérique unique, TSource ou TResult

X

 

 

OfType<TResult>

IEnumerable<T>

 

X

 

OrderBy

IOrderedEnumerable<TElement>

 

 

X

OrderByDescending

IOrderedEnumerable<TElement>

 

 

X

Range

IEnumerable<T>

 

X

 

Repeat<TResult>

IEnumerable<T>

 

X

 

Reverse<TSource>

IEnumerable<T>

 

 

X

Select

IEnumerable<T>

 

X

 

SelectMany

IEnumerable<T>

 

X

 

SequenceEqual

Boolean

X

 

 

Single

TSource

X

 

 

SingleOrDefault

TSource

X

 

 

Skip<TSource>

IEnumerable<T>

 

X

 

SkipWhile

IEnumerable<T>

 

X

 

Sum

Valeur numérique unique

X

 

 

Take<TSource>

IEnumerable<T>

 

X

 

TakeWhile

IEnumerable<T>

 

X

 

ThenBy

IOrderedEnumerable<TElement>

 

 

X

ThenByDescending

IOrderedEnumerable<TElement>

 

 

X

ToArray<TSource>

Tableau TSource

X

 

 

ToDictionary

Dictionary<TKey, TValue>

X

 

 

ToList<TSource>

IList<T>

X

 

 

ToLookup

ILookup<TKey, TElement>

X

 

 

Union

IEnumerable<T>

 

X

 

Where

IEnumerable<T>

 

X

 

Voir aussi

Concepts

Vue d'ensemble des opérateurs de requête standard

Syntaxe des expressions de requête pour les opérateurs de requête standard

LINQ to Objects

Référence

Enumerable