2008-10-29 24 views

Respuesta

6

IQueryable implementa IEnumerable, así que desde el principio, con IQueryable, puede hacer todo lo que puede hacer con IEnumerable. IQueryables trata de convertir algunas expresiones lambda en consultas en el origen de datos subyacente, esto podría ser una base de datos SQL o un conjunto de objetos.

Básicamente, por lo general, no debería tener que importarle a uno u otro lado si es un IQueryable o un IEnumerable.

6

Como usuario, generalmente no debería tener que preocuparse, se trata realmente del implementador de la fuente de datos. Si los proveedores de datos solo implementan IEnumerable, básicamente estás haciendo LINQ para la ejecución de objetos, es decir, está en operación de memoria en colecciones. IQueryable proporciona a la fuente 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 mediante enumeración), que es lo que hacen Linq2Sql, Linq2Xml y Linq2Entities.

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

1

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, marque blog post que muestra cómo el SQL generado por IEnumerable e IQueryable son diferentes en ciertos escenarios.

Cuestiones relacionadas