Pregunta

Hago más y más ejercicio con Lambda, pero no entiendo por qué en algún momento el ejemplo usa .AsQueryable (); que usa IQueryable y en ocasiones omite el .AsQueryable (); y use el IEnumerable.

He leído el MSDN pero no veo cómo " ejecutando un árbol de expresiones " es una ventaja sobre no.

¿Alguien puede explicármelo?

¿Fue útil?

Solución

IQueryable implementa IEnumerable, así que desde el principio, con IQueryable, puedes hacer todo lo que puedes hacer con IEnumerable. IQueryables trata de convertir una expresión lambda en una consulta en el origen de datos subyacente, esto podría ser una base de datos SQL o un conjunto de objetos.

Básicamente, normalmente no deberías tener que preocuparte de una manera u otra si es un IQueryable, o un IEnumerable.

Otros consejos

Como usuario, generalmente no debería tener que preocuparse, se trata realmente del implementador de la fuente de datos. Si los proveedores de datos simplemente implementan IEnumerable, básicamente está haciendo LINQ para la ejecución de objetos, es decir, está en la operación de memoria en las colecciones. IQueryable proporciona al origen de datos la capacidad de traducir el árbol de expresiones en una representación alternativa para su ejecución una vez que se ejecuta la expresión (generalmente por enumeración), que es lo que hacen Linq2Sql, Linq2Xml y Linq2Entities.

La única vez que puedo ver que el usuario final se preocupa es si desean inspeccionar el árbol de Expresión que se ejecutaría, ya que IQueryable expone la Expresión. Otro uso podría ser inspeccionar al Proveedor. Pero ambos escenarios deberían estar realmente reservados para los implementadores de otros proveedores de consultas y quieren transformar la expresión. El objetivo de Linq es que no debe preocuparse por la implementación de la ejecución de la expresión que se utilizará.

Estoy de acuerdo con Arne Claassen, hay casos en los que debe pensar en la implementación subyacente proporcionada por las fuentes de datos. Por ejemplo, verifique este blog publicación que muestra cómo los SQL generados por IEnumerable e IQueryable son diferentes en ciertos escenarios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top