Tengo un proveedor de Linq que funciona correctamente y obtiene datos de mi fuente de datos elegida, pero lo que me gustaría hacer ahora que tengo mi filtrado es permitir LINQ a objetos para procesar el resto del árbol de expresión (para cosas como las uniones, proyección, etc.)Realizando parte de una consulta IQueryable y difiriendo el resto a Linq for Objects
mi pensamiento era que podía simplemente reemplazar la constante de expresión que contiene mi IQueryProvider con los conjuntos de resultados IEnumerable a través de un ExpressionVisitor y luego devolver esa nueva expresión. También volver proveedor del IEnumerable de mi IQueryable ... pero esto no parece funcionar :-(
Edición de Cualquier idea:? Algunas buenas respuestas aquí, pero dada la forma ...
var qry = from c in MyProv.Table<Customer>()
Join o in MyProv.Table<Order>() on c.OrderID equals o.ID
select new
{
CustID = c.ID,
OrderID = o.ID
}
En mi proveedor puedo recuperar fácilmente los 2 resultados de clientes y pedidos, si los datos provienen de una fuente SQL, solo construiría y transmitiría la sintaxis de SQL Join, pero en este caso los datos no son de un Fuente SQL, así que necesito hacer la combinación en el código ... pero como dije, tengo los 2 conjuntos de resultados, y Linq to Objects puede hacer un join ... (y luego el proyección) sería muy bueno simplemente sustituir las constantes de expresión MyProv.Table<Customer>
y MyProv.Table<Order>
con List<Customer>
y List<Order>
y dejar que un proveedor List<>
procese la expresión ... ¿es eso posible? ¿cómo?
te lo agradezco de rodillas - el fondo de visitantes árbol de expresión. :) Esto es exactamente lo que necesitaba – Rik