我想知道如何将一个SQL字符串翻译成表达式树。目前,在Linq to SQL中,表达式树被翻译成SQL语句。那么反过来怎么做呢?你会如何翻译呢?
select * from books where bookname like '%The%' and year > 2008
在C#中将其转换为表达式树?
我想知道如何将一个SQL字符串翻译成表达式树。目前,在Linq to SQL中,表达式树被翻译成SQL语句。那么反过来怎么做呢?你会如何翻译呢?
select * from books where bookname like '%The%' and year > 2008
我不知道是否有更简单的方法,但我为SQL表达式编写了一个词法分析器和解析器,生成了自定义的抽象语法树(当时我还不知道.net的表达式树),而且我并不喜欢解析SQL。
这种语法在解析上并不友好,因为顺序取决于上下文(例如,在NOT IN
与IS NOT
中的not),标记也是重载的(用于覆盖默认运算符优先级的括号与用于创建列表的括号,如WHERE x IN (1, 2)
)等等。
显然,使用解析器生成器而不是自己编写词法分析器和解析器会使事情变得更容易,但我不知道是否有更专门针对SQL的工具。
因此,编写自己的解析器肯定是可行的,尽管有些繁琐。