Clasificación de operadores de consulta estándar por modo de ejecución (C#)Classification of Standard Query Operators by Manner of Execution (C#)

Las implementaciones de LINQ to Objects de los métodos de operador de consulta estándar se ejecutan de una de dos formas principales: inmediata o aplazada.The LINQ to Objects implementations of the standard query operator methods execute in one of two main ways: immediate or deferred. Los operadores de consulta que usan la ejecución aplazada pueden dividirse además en dos categorías: de streaming y de no streaming.The query operators that use deferred execution can be additionally divided into two categories: streaming and non-streaming. Si sabe cómo se ejecutan los diferentes operadores de consulta, puede servirle para entender los resultados que se obtienen de una consulta determinada.If you know how the different query operators execute, it may help you understand the results that you get from a given query. Esto es especialmente cierto si se está cambiando el origen de datos o si se está creando una consulta sobre otra.This is especially true if the data source is changing or if you are building a query on top of another query. En este tema se clasifican los operadores de consulta estándar según su modo de ejecución.This topic classifies the standard query operators according to their manner of execution.

Modos de ejecuciónManners of Execution

InmediatoImmediate

La ejecución inmediata significa que se lee el origen de datos y la operación se realiza en el punto en el código donde se declara la consulta.Immediate execution means that the data source is read and the operation is performed at the point in the code where the query is declared. Todos los operadores de consulta estándar que devuelven un resultado único no enumerable se ejecutan de manera inmediata.All the standard query operators that return a single, non-enumerable result execute immediately.

AplazadaDeferred

La ejecución aplazada significa que la operación no se realiza en el punto en el código donde se declara la consulta.Deferred execution means that the operation is not performed at the point in the code where the query is declared. La operación se realiza solo cuando se enumera la variable de consulta, por ejemplo, mediante una instrucción foreach.The operation is performed only when the query variable is enumerated, for example by using a foreach statement. Esto significa que los resultados de ejecutar la consulta dependen del contenido del origen de datos cuando se ejecuta la consulta en lugar de cuando se define la consulta.This means that the results of executing the query depend on the contents of the data source when the query is executed rather than when the query is defined. Si la variable de consulta se enumera varias veces, es posible que los resultados difieran cada vez.If the query variable is enumerated multiple times, the results might differ every time. Casi todos los operadores de consulta estándar cuyo tipo de valor devuelto es IEnumerable<T> o IOrderedEnumerable<TElement> se ejecutan de una manera diferida.Almost all the standard query operators whose return type is IEnumerable<T> or IOrderedEnumerable<TElement> execute in a deferred manner.

Los operadores de consulta que usan la ejecución aplazada pueden clasificarse además como de streaming o de no streaming.Query operators that use deferred execution can be additionally classified as streaming or non-streaming.

StreamingStreaming

Los operadores de streaming no deben leer todos los datos de origen antes de que produzcan elementos.Streaming operators do not have to read all the source data before they yield elements. En el momento de la ejecución, un operador de streaming realiza su operación en cada elemento de origen mientras se lee y proporciona el elemento si es necesario.At the time of execution, a streaming operator performs its operation on each source element as it is read and yields the element if appropriate. Un operador de streaming continúa leyendo los elementos de origen hasta que se puede generar un elemento de resultado.A streaming operator continues to read source elements until a result element can be produced. Esto significa que es posible leer más de un elemento de origen para generar un elemento de resultado.This means that more than one source element might be read to produce one result element.

No streamingNon-Streaming

Los operadores de no streaming deben leer todos los datos de origen antes de poder proporcionar un elemento de resultado.Non-streaming operators must read all the source data before they can yield a result element. Las operaciones como la ordenación o la agrupación pertenecen a esta categoría.Operations such as sorting or grouping fall into this category. En tiempo de ejecución, los operadores de consulta de no streaming leen todos los datos de origen, los colocan en una estructura de datos, realizan la operación y proporcionan los elementos resultantes.At the time of execution, non-streaming query operators read all the source data, put it into a data structure, perform the operation, and yield the resulting elements.

Tabla de clasificaciónClassification Table

En la tabla siguiente se clasifica cada método de operador de consulta estándar según su método de ejecución.The following table classifies each standard query operator method according to its method of execution.

Nota

Si un operador se marca en dos columnas, dos secuencias de entrada intervienen en la operación, y cada secuencia se evalúa de manera diferente.If an operator is marked in two columns, two input sequences are involved in the operation, and each sequence is evaluated differently. En estos casos, siempre es la primera secuencia de la lista de parámetros la que se evalúa en un modo de transmisión diferido.In these cases, it is always the first sequence in the parameter list that is evaluated in a deferred, streaming manner.

Operador de consulta estándarStandard Query Operator Tipo devueltoReturn Type Ejecución inmediataImmediate Execution Ejecución aplazada de streamingDeferred Streaming Execution Ejecución aplazada de no streamingDeferred Non-Streaming Execution
Aggregate TSourceTSource XX
All Boolean XX
Any Boolean XX
AsEnumerable IEnumerable<T> XX
Average Valor numérico únicoSingle numeric value XX
Cast IEnumerable<T> XX
Concat IEnumerable<T> XX
Contains Boolean XX
Count Int32 XX
DefaultIfEmpty IEnumerable<T> XX
Distinct IEnumerable<T> XX
ElementAt TSourceTSource XX
ElementAtOrDefault TSourceTSource XX
Empty IEnumerable<T> XX
Except IEnumerable<T> XX XX
First TSourceTSource XX
FirstOrDefault TSourceTSource XX
GroupBy IEnumerable<T> XX
GroupJoin IEnumerable<T> XX XX
Intersect IEnumerable<T> XX XX
Join IEnumerable<T> XX XX
Last TSourceTSource XX
LastOrDefault TSourceTSource XX
LongCount Int64 XX
Max Valor numérico único, TSource o TResultSingle numeric value, TSource, or TResult XX
Min Valor numérico único, TSource o TResultSingle numeric value, TSource, or TResult XX
OfType IEnumerable<T> XX
OrderBy IOrderedEnumerable<TElement> XX
OrderByDescending IOrderedEnumerable<TElement> XX
Range IEnumerable<T> XX
Repeat IEnumerable<T> XX
Reverse IEnumerable<T> XX
Select IEnumerable<T> XX
SelectMany IEnumerable<T> XX
SequenceEqual Boolean XX
Single TSourceTSource XX
SingleOrDefault TSourceTSource XX
Skip IEnumerable<T> XX
SkipWhile IEnumerable<T> XX
Sum Valor numérico únicoSingle numeric value XX
Take IEnumerable<T> XX
TakeWhile IEnumerable<T> XX
ThenBy IOrderedEnumerable<TElement> XX
ThenByDescending IOrderedEnumerable<TElement> XX
ToArray Matriz de TSourceTSource array XX
ToDictionary Dictionary<TKey,TValue> XX
ToList IList<T> XX
ToLookup ILookup<TKey,TElement> XX
Union IEnumerable<T> XX
Where IEnumerable<T> XX

Vea tambiénSee also