Pregunta

¿Qué tan fácil sería para escribir un proveedor de LINQ tonto que sólo puede utilizar mis definiciones de clases (que no tienen ninguna referencia de objeto como propiedades) y me dan el SQL traducido. Se puede asumir el nombre de las propiedades y las columnas a ser la misma, así como los nombres de las clases y las tablas subyacentes. ¿Me podría dar algunos consejos.?

¿Fue útil?

Solución

Me tomó cerca de 4 meses de trabajo a tiempo completo (8 horas al día) para construir un proveedor estable, trabajo que implementa toda la especificación de LINQ. Yo diría que tuve una muy simple, con errores y la versión inestable después de unas tres semanas, por lo que si usted está buscando algo áspera yo diría que probablemente está buscando en cualquier cosa, desde una semana hasta dos meses, dependiendo de lo bien que se son y qué tipos de requiements que tiene.

Debo señalar al blog Wayward para esto, Matt ha escrito un muy buen tutorial sobre cómo implementar un proveedor de LINQ, e incluso si usted está probablemente no va a ser capaz de copiar y pegar, que le ayudará a para poder familiarizarse con la forma de pensar cuando se trabaja. Puede encontrar Matt's tutorial aquí: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx . Te recomiendo que hacerlo de la misma manera lo hace Matt, y extender el visitante árbol de expresión Matt incluye en la segunda parte de su tutorial.

Además, cuando empecé a trabajar con esto, yo tenía tanta ayuda del visualizador árbol de expresión, lo que realmente hizo que el análisis sea mucho más fácil una vez que usted podría ver cómo LINQ analizan a las consultas.

La construcción de un proveedor es realmente muy divertido, aunque un poco frustrante a veces. Te deseo toda la suerte del mundo!

Otros consejos

Dale un vistazo a la LINQExtender proyecto, es un conjunto de herramientas para la creación de proveedores LINQ personalizado.

Otra opción para darle una ventaja parece ser re-LINQ que es un marco para la creación de proveedores LINQ personalizado.

Aquí está la fuente y una visión agradable (pdf) de lo que está involucrado en escribir uno.

He escrito una serie de tutoriales en mi base de blog en mi experiencia en el desarrollo de un proveedor de LINQ a SQL desde cero, comenzando con la etapa de composición árbol de expresión (llamando a los métodos de LINQ), continuando con el visitante expresión, rompiendo de la consulta en componentes, analizar la cláusula where, generando el texto y los parámetros y, con el tiempo, la compilación de todo el asunto en IL utilizando el espacio de nombres expresión .NET.

He visto muchos mensajes incompletos que se comprometió a explicar cómo escribir un proveedor, cayendo muy por debajo de la marca, apenas arañar la superficie y en realidad no entregar algo remotamente ejecutable.

La serie del blog he escrito basado en mi experiencia tiene un proyecto de ejemplo disponible para su descarga con el simple proveedor que cubre sólo la funcionalidad requerida por el ejemplo del tutorial. Sin embargo, también incluye la versión de producción que soporta un número de operaciones (donde, unir, en primer lugar, cuentan, superior, etc.), subconsultas, declaraciones anidadas, y etc. Además, se produce un SQL más limpio que mucho de lo que yo he visto de Entidades y LINQ a SQL. No hay anidación innecesaria / redundante, envolviendo todo en los soportes y etc.

Para cualquier persona con un buen nivel de pensamiento abstracto, el desarrollo de un proveedor de este tipo no es un conjunto de muchas tales difícil tarea que fuera a ser. He desarrollado una que se utiliza en el entorno de producción en aproximadamente 3 meses de trabajo a tiempo parcial (es decir, algunas tardes y los fines de semana). Desde el principio que tenía como objetivo con un rendimiento de SQL y ordenada en mente - una meta que alcanzar.

Fue un poco difícil encontrar el momento de publicar este material, pero pensé - si se puede ayudar a alguien por ahí, no hay razón para esta experiencia para ir a los residuos:

He creado un proyecto ' LinqToAnything ' que está diseñado para que sea muy fácil de poner en práctica una (simple) proveedor de Linq.

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