Partager via


Classification des opérateurs de requête standard par mode d’exécution (Visual Basic)

Les implémentations LINQ to Objects des méthodes d’opérateur de requête standard s’exécutent de deux façons principales : immédiate ou différée. Les opérateurs de requête qui utilisent l’exécution différée peuvent également être divisés en deux catégories : la diffusion en continu et la non-diffusion en continu. Si vous savez comment les différents opérateurs de requête s’exécutent, cela peut vous aider à comprendre les résultats que vous obtenez à partir d’une requête donnée. Cela est particulièrement vrai si la source de données change ou si vous créez une requête en plus d’une autre requête. Cette rubrique classifie les opérateurs de requête standard en fonction de leur mode 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 dans le code où la requête est déclarée. Tous les opérateurs de requête standard qui retournent un résultat unique et non énumérable s’exécutent immédiatement.

Reporté

L’exécution différée signifie que l’opération n’est pas effectuée au point dans le code où la requête est déclarée. L’opération est effectuée uniquement lorsque la variable de requête est énumérée, par exemple à l’aide d’une For Each instruction. 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 lorsque la requête est définie. Si la variable de requête est énumérée plusieurs fois, les résultats peuvent différer à 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 être classés en tant que diffusion en continu ou hors streaming.

Diffusion en continu

Les opérateurs de diffusion en continu n’ont pas besoin de lire toutes les données sources avant de générer des éléments. Au moment de l’exécution, un opérateur de diffusion en continu effectue son opération sur chaque élément source tel qu’il est lu et génère l’élément le cas échéant. Un opérateur de streaming continue de lire les éléments sources jusqu’à ce qu’un élément de résultat puisse être produit. Cela signifie que plusieurs éléments sources peuvent être lus pour produire un élément de résultat.

Non-diffusion en continu

Les opérateurs non de diffusion en continu doivent lire toutes les données sources avant de pouvoir générer un élément de résultat. Les opérations telles que le tri ou le regroupement appartiennent à cette catégorie. Au moment de l’exécution, les opérateurs de requête sans streaming lisent toutes les données sources, les placent dans une structure de données, effectuent l’opération et produisent les éléments résultants.

Classification Table

Le tableau suivant classifie chaque méthode d’opérateur de requête standard en fonction de sa méthode 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 chaque séquence est évaluée différemment. Dans ces cas, il s’agit toujours de la première séquence de la liste de paramètres évaluée de manière différée et en continu.

Opérateur de requête standard Type renvoyé Exécution immédiate Exécution différée de streaming Exécution différée sans diffusion en continu
Aggregate TSource X
All Boolean X
Any Boolean X
AsEnumerable IEnumerable<T> X
Average Valeur numérique unique X
Cast IEnumerable<T> X
Concat IEnumerable<T> X
Contains Boolean X
Count Int32 X
DefaultIfEmpty IEnumerable<T> X
Distinct IEnumerable<T> X
ElementAt TSource X
ElementAtOrDefault TSource X
Empty IEnumerable<T> X
Except IEnumerable<T> X X
First TSource X
FirstOrDefault TSource X
GroupBy IEnumerable<T> X
GroupJoin IEnumerable<T> X 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 IEnumerable<T> X
OrderBy IOrderedEnumerable<TElement> X
OrderByDescending IOrderedEnumerable<TElement> X
Range IEnumerable<T> X
Repeat IEnumerable<T> X
Reverse IEnumerable<T> X
Select IEnumerable<T> X
SelectMany IEnumerable<T> X
SequenceEqual Boolean X
Single TSource X
SingleOrDefault TSource X
Skip IEnumerable<T> X
SkipWhile IEnumerable<T> X
Sum Valeur numérique unique X
Take IEnumerable<T> X
TakeWhile IEnumerable<T> X
ThenBy IOrderedEnumerable<TElement> X
ThenByDescending IOrderedEnumerable<TElement> X
ToArray Tableau TSource X
ToDictionary Dictionary<TKey,TValue> X
ToList IList<T> X
ToLookup ILookup<TKey,TElement> X
Union IEnumerable<T> X
Where IEnumerable<T> X

Voir aussi