Megosztás a következőn keresztül:


Standard lekérdezési operátorok besorolása végrehajtás alapján (Visual Basic)

A standard lekérdezésoperátori metódusok LINQ to Objects implementációi két fő módszer egyikét hajtják végre: azonnali vagy halasztott. A késleltetett végrehajtást használó lekérdezési operátorok két kategóriába sorolhatók: streamelés és nem streamelés. Ha tudja, hogyan hajtják végre a különböző lekérdezési operátorokat, az segíthet megérteni az adott lekérdezésből kapott eredményeket. Ez különösen igaz, ha az adatforrás változik, vagy ha egy lekérdezést egy másik lekérdezésre épít. Ez a témakör a szabványos lekérdezési operátorokat a végrehajtásuk módjának megfelelően sorolja be.

Végrehajtási módok

Azonnali

Az azonnali végrehajtás azt jelenti, hogy az adatforrás beolvasása és a művelet végrehajtása a kód azon pontján történik, ahol a lekérdezés deklarálva van. Az egyetlen, nem számozható eredményt visszaadó standard lekérdezési operátorok mindegyike azonnal végrehajtja a végrehajtást.

Halasztott

A késleltetett végrehajtás azt jelenti, hogy a műveletet nem a kód azon pontján hajtják végre, ahol a lekérdezés deklarálva van. A műveletet csak akkor hajtja végre a rendszer, ha a lekérdezési változó számba van írva, például egy For Each utasítás használatával. Ez azt jelenti, hogy a lekérdezés végrehajtásának eredményei az adatforrás tartalmától függnek a lekérdezés végrehajtásakor, nem pedig a lekérdezés definiálásakor. Ha a lekérdezési változó többször van enumerálva, az eredmények minden alkalommal eltérőek lehetnek. Szinte minden olyan szabványos lekérdezési operátor, amelynek visszatérési típusa IEnumerable<T> vagy IOrderedEnumerable<TElement> halasztott módon hajtható végre.

A késleltetett végrehajtást használó lekérdezési operátorokat tovább lehet sorolni streamelésnek vagy nem streamelésnek.

Online közvetítés

A streamszolgáltatóknak nem kell beolvasniuk az összes forrásadatot, mielőtt elemeket hoznának létre. A végrehajtáskor a streamszolgáltató minden forráselemen végrehajtja a műveletet az olvasás során, és adott esetben az elemet adja meg. A streamszolgáltató továbbra is olvassa a forráselemeket, amíg létre nem jön egy eredményelem. Ez azt jelenti, hogy egy eredményelem előállításához több forráselem is olvasható.

Streamelés nélküli mód

A nem streamelő operátoroknak be kell olvasniuk az összes forrásadatot, mielőtt eredményt kaphatnak. Az olyan műveletek, mint a rendezés vagy a csoportosítás ebbe a kategóriába tartoznak. A végrehajtáskor a nem streamelt lekérdezési operátorok beolvassák az összes forrásadatot, adatstruktúrába helyezik, végrehajtják a műveletet, és az eredményül kapott elemeket eredményezik.

Besorolási táblázat

Az alábbi táblázat az egyes standard lekérdezési operátor-metódusokat a végrehajtási módszerének megfelelően sorolja be.

Megjegyzés:

Ha egy operátor két oszlopban van megjelölve, két bemeneti sorozat vesz részt a műveletben, és az egyes sorozatok kiértékelése másképp történik. Ezekben az esetekben mindig ez az első sorozat a paraméterlistában, amelyet halasztott, streamelési módon értékelnek ki.

Standard lekérdezési operátor Visszatérési típus Azonnali végrehajtás Késleltetett streamelés végrehajtása Késleltetett nem streamelés végrehajtása
Aggregate TSource X
All Boolean X
Any Boolean X
AsEnumerable IEnumerable<T> X
Average Egyetlen numerikus érték 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 Egy numerikus érték, TSource vagy TResult X
Min Egy numerikus érték, TSource vagy 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 Egyetlen numerikus érték X
Take IEnumerable<T> X
TakeWhile IEnumerable<T> X
ThenBy IOrderedEnumerable<TElement> X
ThenByDescending IOrderedEnumerable<TElement> X
ToArray TSource-tömb X
ToDictionary Dictionary<TKey,TValue> X
ToList IList<T> X
ToLookup ILookup<TKey,TElement> X
Union IEnumerable<T> X
Where IEnumerable<T> X

Lásd még