Clasificación de operadores de consulta estándar por modo de ejecución
Actualización: noviembre 2007
LINQ to Objects implementa los métodos de operadores de consulta estándar mediante dos formas posibles de ejecución: inmediata o aplazada. Los operadores de consulta que utilizan la ejecución aplazada pueden dividirse a su vez en dos categorías: con o sin transmisión por secuencias. Saber cómo se ejecutan los distintos operadores de consulta puede resultar útil para entender los resultados obtenidos a partir de una consulta determinada. Esto se cumple especialmente si el origen de datos cambia o si genera una consulta sobre otra. En este tema se clasifican los operadores de consulta estándar según su modo de ejecución.
Modos de ejecución
Inmediata
Ejecución inmediata significa que el origen de datos se lee 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 resultado único no enumerable se ejecutan de forma inmediata.
Aplazada
Ejecución aplazada significa que la operación no se realiza en el punto del código donde se declara la consulta. La operación se realiza solamente cuando se enumera la variable de consulta, por ejemplo, cuando se utiliza una instrucción foreach (For Each en Visual Basic). Esto significa que los resultados de la ejecución de la consulta dependen del contenido del origen de datos cuando se ejecuta la consulta, no cuando ésta se define. Si la variable de consulta se enumera varias veces, pueden obtenerse resultados distintos en cada ocasión. Casi todos los operadores de consulta estándar cuyo tipo de valor devuelto es IEnumerable<T> o IOrderedEnumerable<TElement> se ejecutan de forma aplazada.
Los operadores de consulta que utilizan la ejecución aplazada pueden clasificarse a su vez en operadores con o sin transmisión por secuencias.
Con transmisión por secuencias
Los operadores con transmisión por secuencias no tienen que leer todos los datos de origen para proporcionar los elementos de resultado. En el momento de la ejecución, un operador de este tipo actúa en cada elemento de origen cuando se lee y proporciona el elemento si es pertinente. Un operador con transmisión por secuencias continúa leyendo elementos de origen hasta que puede generarse un elemento de resultado. Esto significa que puede leerse más de un elemento de origen para generar un elemento de resultado.
Sin transmisión por secuencias
Los operadores sin transmisión por secuencias deben leer todos los datos de origen para poder proporcionar un elemento de resultado. Operaciones como la ordenación o la agrupación pertenecen a esta categoría. En el momento de la ejecución, los operadores de consulta sin transmisión por secuencias leen todos los datos de origen, los colocan en una estructura de datos, realizan la operación y proporcionan 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 aparece en dos columnas, dos secuencias de entrada intervienen en la operación y cada una de ellas se evalúa de forma distinta. En estos casos, la primera secuencia de la lista de parámetros siempre se evalúa de forma aplazada con transmisión por secuencias. |
Operador de consulta estándar |
Tipo de valor devuelto |
Ejecución inmediata |
Ejecución aplazada con transmisión por secuencias |
Ejecución aplazada sin transmisión por secuencias |
---|---|---|---|---|
TSource |
X |
|
|
|
X |
|
|
||
X |
|
|
||
X |
|
|||
Valor numérico único |
X |
|
|
|
|
X |
|
||
|
X |
|
||
X |
|
|
||
X |
|
|
||
|
X |
|
||
|
X |
|
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
X |
|
|
||
X |
X |
|||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
|
|
X |
||
X |
X |
|||
X |
X |
|||
X |
X |
|||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
X |
|
|
||
Valor numérico único, TSource o TResult |
X |
|
|
|
Valor numérico único, TSource o TResult |
X |
|
|
|
|
X |
|
||
|
|
X |
||
|
|
X |
||
|
X |
|
||
|
X |
|
||
|
|
X |
||
|
X |
|
||
|
X |
|
||
X |
|
|
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
|
X |
|
||
|
X |
|
||
Valor numérico único |
X |
|
|
|
|
X |
|
||
|
X |
|
||
|
|
X |
||
|
|
X |
||
Matriz de TSource |
X |
|
|
|
X |
|
|
||
X |
|
|
||
X |
|
|
||
|
X |
|
||
|
X |
|
Vea también
Conceptos
Información general sobre operadores de consulta estándar
Sintaxis de las expresiones de consulta para operadores de consulta estándar