Klassificering av standardfrågeoperatorer genom körning (Visual Basic)
LINQ-till-objekt-implementeringarna av standardmetoderna för frågeoperatorer körs på något av två huvudsakliga sätt: omedelbart eller uppskjutet. De frågeoperatorer som använder uppskjuten körning kan dessutom delas in i två kategorier: direktuppspelning och icke-direktuppspelning. Om du vet hur de olika frågeoperatorerna körs kan det hjälpa dig att förstå de resultat som du får från en viss fråga. Detta gäller särskilt om datakällan ändras eller om du skapar en fråga ovanpå en annan fråga. Det här avsnittet klassificerar standardfrågeoperatorerna enligt deras körningssätt.
Sätt att köra
Omedelbara
Omedelbar körning innebär att datakällan läses och att åtgärden utförs vid den punkt i koden där frågan deklareras. Alla standardfrågeoperatorer som returnerar ett enda, icke-uppräkningsbart resultat körs omedelbart.
Uppskjutet
Uppskjuten körning innebär att åtgärden inte utförs vid den punkt i koden där frågan deklareras. Åtgärden utförs endast när frågevariabeln räknas upp, till exempel med hjälp av en For Each
-instruktion. Det innebär att resultatet av att köra frågan beror på innehållet i datakällan när frågan körs i stället för när frågan definieras. Om frågevariabeln räknas upp flera gånger kan resultatet variera varje gång. Nästan alla standardfrågeoperatorer vars returtyp är IEnumerable<T> eller IOrderedEnumerable<TElement> körs på ett uppskjutet sätt.
Frågeoperatorer som använder uppskjuten körning kan dessutom klassificeras som direktuppspelning eller icke-direktuppspelning.
Strömning
Strömningsoperatorer behöver inte läsa alla källdata innan de ger element. Vid tidpunkten för körningen utför en strömningsoperator sin åtgärd på varje källelement när det läse och ger elementet vid behov. En strömningsoperator fortsätter att läsa källelement tills ett resultatelement kan skapas. Det innebär att mer än ett källelement kan läsas för att skapa ett resultatelement.
Icke-direktuppspelning
Icke-strömmande operatorer måste läsa alla källdata innan de kan ge ett resultatelement. Åtgärder som sortering eller gruppering tillhör den här kategorin. Vid tidpunkten för körningen läser icke-strömmande frågeoperatorer alla källdata, placerar dem i en datastruktur, utför åtgärden och ger de resulterande elementen.
Klassificeringstabell
I följande tabell klassificeras varje standardmetod för frågeoperatorer enligt dess körningsmetod.
Kommentar
Om en operator är markerad i två kolumner är två indatasekvenser inblandade i åtgärden och varje sekvens utvärderas på olika sätt. I dessa fall är det alltid den första sekvensen i parameterlistan som utvärderas på ett uppskjutet, strömmande sätt.