2010-05-14 17 views
7

Mi chiedo come tradurre una stringa sql in un albero di espressioni. Attualmente, in Linq to SQL, l'albero delle espressioni è tradotto in un'istruzione sql. Come va il contrario? Come tradurrebbeistruzione sql nell'albero delle espressioni

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

in un albero di espressione in C#?

+0

Hai trovato qualche soluzione per questa domanda. Ho anche bisogno di ottenere un albero di espressioni da una stringa sql in C# – Saravanan

risposta

0

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

aggiornamento

Entity Framework ha la lingua Entity SQL. Non sono sicuro se questo è quello che vuoi però.

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

+0

Beh ... Sort of. Linq dinamico consente di specificare gli argomenti di espressione di linq lambda come stringhe, ma è comunque necessario specificare i metodi di estensione (.Seleziona, .Where) delle istruzioni di linq direttamente. –

+0

sarebbe bello non usare linq dinamico ma costruito semplicemente da System.Linq.Expressions –

0

Non so se c'è un modo più semplice, ma ho scritto un lexer e parser per espressioni SQL in un personalizzato Abstract Syntax Albero (come io non conoscevo Expression Trees di .net al momento) e non mi è piaciuto molto l'analisi di SQL.

La sintassi solo che non è molto amichevole analizzare, come ordine è diverso a seconda del contesto (ad esempio, il non in NOT IN vs IS NOT), i token sono sovraccaricati (la parentesi per sovrascrivere la precedenza operatore predefinito vs. parentesi per la creazione di un elenco come in WHERE x IN (1, 2)) e così via.

Ovviamente l'utilizzo di un generatore di parser invece di eseguire il lexing e l'analisi personale semplificherebbe le cose, ma non so se c'è qualcosa di più specifico in SQL.

Quindi, scrivere il proprio è sicuramente possibile, anche se noioso.