Qué tipos instanciate-able implementando IQueryable están disponibles in.Net ¿4.0?


Dentro del contexto de C# en. Net 4.0, ¿hay algún objeto incorporado que implemente IQueryable<T>?

Author: one.beat.consumer, 2012-02-07

3 answers

IQueryable los objetos son producidos por Proveedores consultables (ej. LINQ a SQL, LINQ a Entities / Entity Framework, etc.). Prácticamente nada de lo que pueda crear instancias con new en el framework básico de.NET implementa IQueryable.

IQueryable es una interfaz diseñada para ser utilizada para crear proveedores consultables, que permiten que la biblioteca LINQ se aproveche contra un almacén de datos externo mediante la construcción de un árbol de expresiones capaz de analizar. Por naturaleza, los Consultables requieren un contexto-información sobre lo que exactamente lo estás preguntando. Usar new para crear cualquier tipo IQueryable, independientemente de si es posible, no te lleva muy lejos.

Dicho esto, cualquier IEnumerable se puede convertir en un IQueryable utilizando el método de extensión AsQueryable(). Esto crea una construcción superficialmente similar, pero funcionalmente muy diferente entre bastidores como cuando se usan métodos LINQ contra un objeto IEnumerable simple. Esta es probablemente la fuente más abundante de queryables a la que tiene acceso sin configurar un verdadero proveedor de IQueryable. Este cambio es muy útil para la prueba unitaria de algoritmos basados en LINQ, ya que no necesita el almacén de datos real, solo una lista de datos en memoria que pueden imitarlo.

 53
Author: KeithS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-07 02:18:16

EntityCollection lo hace, al igual que EnumerableQuery.

No creo que ninguno de estos vaya a llevarte a ninguna parte. Para ayudar, necesitamos saber lo que realmente estás tratando de resolver. Si está escribiendo un proveedor de LINQ, debe leer esto: http://msdn.microsoft.com/en-us/library/bb546158.aspx .

Recomiendan escribir su propia implementación.

 3
Author: Chris Shain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-07 01:51:11

Bueno, tu pregunta es un poco rara... pero yo creo que si miras una interfaz en Reflector, te dará una lista de implementadores en los ensamblados cargados.

Como descargo de responsabilidad, no he usado Reflector desde que se pagó por jugar, así que podría estar equivocado.

 2
Author: kprobst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-07 01:48:54