Pregunta

He intentado algunas formas de usar las consultas dinámicas de LINQ: LINQKit y LINQ Dynamic Query Library. No me gusta el segundo porque de alguna manera anula la idea de LINQ: poder verificar las consultas en tiempo de compilación. Y con LINQKit no encontré un buen ejemplo para mi escenario. Tampoco me gusta el uso excesivo de la reflexión.

Mi escenario es el siguiente. Tengo un servicio web que está haciendo lógica de negocios y lógica DAL. La aplicación de formularios web está separada. Tengo alguna página con casillas de verificación para cada campo que el usuario desea filtrar, y también un cuadro de texto para ingresar cada valor de filtro. Mi servicio web tiene un método GetByFilter donde paso alguna Lista. QueryObject es una clase con cadena: fileName, objeto: fieldValue.

Luego, mi servicio web recibe una lista de objetos de consulta y ahora surge la gran pregunta: ¿cómo traducirla a una consulta LINQ si el número de campos y los valores de filtro pueden variar?

Lo que es aún peor: no uso LINQ2SQL, pero uso un DAL personalizado con repositorios que pueden devolver IQuery si es necesario (como este: http://msdn.microsoft.com/en-us/magazine/dd569757. aspx desplácese hasta Repositorio).

Sé que puedo usar la paginación con LINQ2SQL: var PagedData = query.Skip ((iPageNum - 1) * iPageSize) .Take (iPageSize);

Entonces, ¿cómo puedo obtener los parámetros de consulta dinámicos (y iPageNum y iPageSize) de LINQ a mi implementación DAL subyacente para ejecutar esas consultas de una manera específica del proveedor de datos? ¿Quizás deba implementar mi DAL como proveedor de datos LINQ (no tengo idea de cómo hacerlo)?

El problema es: no quiero depender de LINQ2SQL (entonces podría implementar mis repositorios como envoltorios para LINQ2SQL) pero al mismo tiempo quiero tener capacidades de consulta de LINQ en cualquier lugar fuera de mi DAL. ¿Es posible?

¿Fue útil?

Solución

Es ciertamente posible, lo que estás buscando es crear tu propio IQueryable, un " proveedor LINQ personalizado "

Aquí está el artículo de MSDN: http://msdn.microsoft.com/ en-us / library / bb546158.aspx y Matt Warren tiene una serie de blogs: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx

Recomiendo comenzar con él para ver qué tan difícil puede ser y si vale la pena para ti.

Si decide no hacerlo, lea esta publicación del blog: http: // www .hanselman.com / blog / RealWorldAppsInDaysNotWeeks.aspx y vea si los Servicios de datos de ADO.Net (Astoria) son de alguna utilidad para usted

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