Pregunta

¿Cuál es la mejor manera de forma dinámica escritura de consultas de LINQ y expresiones Lambda?

Estoy pensando en aplicaciones donde el usuario final puede diseñar la lógica de negocio de las reglas, que luego debe ser ejecutado.

Lo siento si es una pregunta de novato, pero sería genial conseguir las mejores prácticas de la experiencia.

¿Fue útil?

Solución

No puedo recomendar más alta de la lectura a través de las publicaciones de Bart De Smet (http://community.bartdesmet.net/blogs/bart/), él es realmente genial cuando se trata de Lambda.

Su reciente serie cubierto dinámica Lambda, comenzando con http://community.bartdesmet.net/blogs/bart/archive/2008/08/26/to-bind-or-not-to-bind-dynamic-expression-trees-part-0.aspx

Absolutamente hermoso código.

Otros consejos

Otra posibilidad es integrar un tiempo de ejecución de secuencias de comandos en su programa, de modo que los usuarios pueden escribir la lógica de negocio en un DSL. IronPython sería un candidato.

Puedo ver dos maneras que usted puede generar dinámicamente lambda.Usted podría tratar de Reflexión.Emiten para generar IL (el .Net de código de bytes) directamente y llamar a ellos como una expresión lambda o puede utilizar el Sistema.CodeDom y Microsoft.CSharp.CSharpCodeProvider para generar el código de nivel superior de las construcciones.Lo que quieres hacer depende de cómo desea que el usuario de entrada de este material.Si desea que el usuario escribe en C# que sólo puede utilizar el construido en el compliler.

La generación de Linq dinámicamente debería ser más fácil.Usted debe ser capaz de generar las consultas de LINQ como los árboles de expresión en tiempo de ejecución y, a continuación, pasar a una IQueryable < t > ejecutar.Yo sugiero que busque en la documentación en IQueryable < t > para saber más acerca de esto.De otra manera sería pre-definir un par de consultas linq y, a continuación, permitir que el usuario de la cadena de ellos juntos.Esto debe de ser factible, ya que cualquier consulta Linq devuelve un IEnumerable que puede ser consumido por la siguiente consulta Linq.

Las expresiones Lambda puede ser creado fácilmente a través del Sistema.Linq.Expresiones de espacio de nombres.

Sistema.Linq.Expresiones es lo que usted necesita.He escrito una agradable interfaz de usuario que permite a los usuarios definir y construir las consultas de forma dinámica en la forma de un árbol de expresión.Usted puede, a continuación, de la mano de fuera a Linq2SQL o cliente de su elección.

No entiendo a qué te refieres diciendo que "la mejor manera".Sería mejor ofrecer a simple ejemplo de lo que quieres lograr.Componer dinámica de expresión LINQ no es difícil, pero difícil.

Aquí es un ejemplo de la dinámica de la expresión linq creación:

¿Cómo puedo componer existente Expresiones Linq

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