2010-05-14 9 views
7

Me pregunto cómo se podría traducir una cadena sql a un árbol de expresiones. Actualmente, en Linq a SQL, el árbol de expresiones se traduce a una declaración sql. ¿Cómo va el otro lado? ¿Cómo traduciríainstrucción sql en el árbol de expresiones

select * from books where bookname like '%The%' and year > 2008 

en un árbol de expresiones en C#?

+0

¿Encontró alguna solución para esta pregunta? También necesito un árbol de expresiones de una cadena de sql en C# – Saravanan

Respuesta

0

http://weblogs.asp.net/rajbk/archive/2007/09/18/dynamic-string-based-queries-in-linq.aspx

actualización

El marco Entidad tiene el lenguaje SQL Entidad. Sin embargo, no estoy seguro de si eso es lo que quieres.

http://msdn.microsoft.com/en-us/library/bb738521.aspx

+0

Bueno ... más o menos. Dynamic Linq le permite especificar sus argumentos de expresión linq lambda como cadenas, pero aún tiene que especificar los métodos de extensión (.Select, .Where) de sus sentencias linq directamente. –

+0

sería bueno no usar dynamic linq, sino simplemente construir desde System.Linq.Expressions –

0

No sé si hay una manera más fácil, pero escribí un analizador léxico y analizador de expresiones SQL en una costumbre del árbol de sintaxis abstracta (como yo no sabía nada de árboles de expresión de .net en ese momento) y realmente no me gusta analizar SQL.

La sintaxis no es muy amigable analizar, como el orden es diferente dependiendo del contexto (por ejemplo, el no en NOT IN vs IS NOT), fichas están sobrecargados (el paréntesis para anular la precedencia de operadores predeterminada vs paréntesis para crear una lista como en WHERE x IN (1, 2)) y así sucesivamente.

Obviamente, usar un generador de analizadores en lugar de hacer su propio léxico y análisis facilitaría las cosas, pero no sé si hay algo más específico para SQL.

Por lo tanto, escribir el tuyo es definitivamente posible, aunque tedioso.

Cuestiones relacionadas