Compartir a través de


Clasificación de operadores de consulta estándar por medio de ejecución (Visual Basic)

Las implementaciones LINQ to Objects de los métodos de operador de consulta estándar se ejecutan de una de estas dos maneras principales: inmediatas o diferidas. Los operadores de consulta que usan la ejecución diferida se pueden dividir además en dos categorías: streaming y no streaming. Si sabe cómo se ejecutan los distintos operadores de consulta, puede ayudarle a comprender los resultados que obtiene de una consulta determinada. Esto es especialmente cierto si el origen de datos está cambiando o si va a crear una consulta sobre otra consulta. En este tema se clasifica a los operadores de consulta estándar según su modo de ejecución.

Modales de ejecución

Inmediata

La ejecución inmediata significa que se lee el origen de datos y la operación se realiza en el punto del código donde se declara la consulta. Todos los operadores de consulta estándar que devuelven un único resultado no enumerable se ejecutan inmediatamente.

Aplazado

La ejecución diferida significa que la operación no se realiza en el punto del código donde se declara la consulta. La operación solo se realiza cuando se enumera la variable de consulta, por ejemplo mediante una For Each instrucción . 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. Si la variable de consulta se enumera varias veces, los resultados pueden diferir cada vez. Casi todos los operadores de consulta estándar cuyo tipo de valor devuelto es IEnumerable<T> o IOrderedEnumerable<TElement> se ejecutan de forma diferida.

Los operadores de consulta que usan la ejecución diferida se pueden clasificar además como streaming o no streaming.

Transmisión en línea

Los operadores de streaming no tienen que leer todos los datos de origen antes de que produzcan elementos. 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. Un operador de streaming continúa leyendo elementos de origen hasta que se pueda generar un elemento de resultado. Esto significa que se puede leer más de un elemento de origen para generar un elemento de resultado.

No streaming

Los operadores de no streaming deben leer todos los datos de origen antes de poder proporcionar un elemento de resultado. Las operaciones como la ordenación o la agrupación se dividen en esta categoría. En el momento de la ejecución, los operadores de consulta que no son de streaming leen todos los datos de origen, lo colocan en una estructura de datos, realizan la operación y producen los elementos resultantes.

Tabla de clasificación

En la tabla siguiente se clasifica cada método de operador de consulta estándar según su método de ejecución.

Nota:

Si un operador está marcado en dos columnas, dos secuencias de entrada intervienen en la operación y cada secuencia se evalúa de forma diferente. En estos casos, siempre es la primera secuencia de la lista de parámetros que se evalúa de forma diferida y de streaming.

Operador de consulta estándar Tipo de valor devuelto Ejecución inmediata Ejecución aplazada de streaming Ejecución aplazada de no streaming
Aggregate TSource X
All Boolean X
Any Boolean X
AsEnumerable IEnumerable<T> X
Average Valor numérico único 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 Valor numérico único, TSource o TResult X
Min Valor numérico único, TSource o 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 Valor numérico único X
Take IEnumerable<T> X
TakeWhile IEnumerable<T> X
ThenBy IOrderedEnumerable<TElement> X
ThenByDescending IOrderedEnumerable<TElement> X
ToArray Matriz de TSource X
ToDictionary Dictionary<TKey,TValue> X
ToList IList<T> X
ToLookup ILookup<TKey,TElement> X
Union IEnumerable<T> X
Where IEnumerable<T> X

Consulte también