Share via


Classificatie van standaardqueryoperators op wijze van uitvoering (Visual Basic)

De IMPLEMENTATIEs van LINQ naar objecten van de standaardqueryoperatormethoden worden op een van de volgende twee manieren uitgevoerd: onmiddellijk of uitgesteld. De queryoperators die gebruikmaken van de uitgestelde uitvoering, kunnen worden onderverdeeld in twee categorieën: streaming en niet-streaming. Als u weet hoe de verschillende queryoperators worden uitgevoerd, kan dit u helpen de resultaten te begrijpen die u krijgt van een bepaalde query. Dit geldt met name als de gegevensbron wordt gewijzigd of als u een query bouwt boven op een andere query. In dit onderwerp worden de standaardqueryoperators ingedeeld op basis van hun manier van uitvoering.

Manieren van uitvoering

Direct

Onmiddellijke uitvoering betekent dat de gegevensbron wordt gelezen en dat de bewerking wordt uitgevoerd op het punt in de code waarin de query wordt gedeclareerd. Alle standaardqueryoperators die één niet-opsommingsbaar resultaat retourneren, worden onmiddellijk uitgevoerd.

Uitgesteld

Uitgestelde uitvoering betekent dat de bewerking niet wordt uitgevoerd op het punt in de code waarin de query wordt gedeclareerd. De bewerking wordt alleen uitgevoerd wanneer de queryvariabele wordt geïnventariseerd, bijvoorbeeld met behulp van een For Each instructie. Dit betekent dat de resultaten van het uitvoeren van de query afhankelijk zijn van de inhoud van de gegevensbron wanneer de query wordt uitgevoerd in plaats van wanneer de query is gedefinieerd. Als de queryvariabele meerdere keren wordt geïnventariseerd, kunnen de resultaten elke keer verschillen. Bijna alle standaardqueryoperators waarvan het retourtype is IEnumerable<T> of IOrderedEnumerable<TElement> op een uitgestelde manier wordt uitgevoerd.

Queryoperators die gebruikmaken van uitgestelde uitvoering, kunnen ook worden geclassificeerd als streaming of niet-streaming.

Streaming

Streamingoperators hoeven niet alle brongegevens te lezen voordat ze elementen opleveren. Op het moment van uitvoering voert een streaming-operator de bewerking uit op elk bronelement terwijl het wordt gelezen en levert het element indien nodig op. Een streamingoperator blijft bronelementen lezen totdat een resultaatelement kan worden geproduceerd. Dit betekent dat meer dan één bronelement kan worden gelezen om één resultaatelement te produceren.

Niet-streaming

Niet-streamingoperators moeten alle brongegevens lezen voordat ze een resultaatelement kunnen opleveren. Bewerkingen zoals sorteren of groeperen vallen in deze categorie. Op het moment van uitvoering lezen niet-streamingqueryoperators alle brongegevens, plaatst u deze in een gegevensstructuur, voert u de bewerking uit en levert u de resulterende elementen op.

Classificatietabel

De volgende tabel classificeert elke standaardqueryoperatormethode op basis van de uitvoeringsmethode.

Notitie

Als een operator in twee kolommen is gemarkeerd, zijn er twee invoerreeksen betrokken bij de bewerking en wordt elke reeks anders geëvalueerd. In deze gevallen is het altijd de eerste reeks in de parameterlijst die op een uitgestelde streaming-manier wordt geëvalueerd.

Standaardqueryoperator Retourtype Onmiddellijke uitvoering Uitgestelde streaming-uitvoering Uitgestelde uitvoering van niet-streaming
Aggregate TSource X
All Boolean X
Any Boolean X
AsEnumerable IEnumerable<T> X
Average Enkele numerieke waarde 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 Enkele numerieke waarde, TSource of TResult X
Min Enkele numerieke waarde, TSource of 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 Enkele numerieke waarde X
Take IEnumerable<T> X
TakeWhile IEnumerable<T> X
ThenBy IOrderedEnumerable<TElement> X
ThenByDescending IOrderedEnumerable<TElement> X
ToArray TSource-matrix X
ToDictionary Dictionary<TKey,TValue> X
ToList IList<T> X
ToLookup ILookup<TKey,TElement> X
Union IEnumerable<T> X
Where IEnumerable<T> X

Zie ook