2010-05-14 4 views
7

Мне интересно, как можно перевести строку sql в дерево выражений. В настоящее время в Linq to SQL дерево выражений преобразуется в оператор sql. Как идти другим путем? Как вы переводили быsql statement to Expression tree

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

в дерево выражений в C#?

+0

Вы нашли решение по этому вопросу. Я также нуждаюсь в получении дерева выражений из строки sql в C# – Saravanan

ответ

0

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

обновление

Структура Entity имеет язык Entity SQL. Не уверен, что это то, чего вы хотите.

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

+0

Ну ... Сортировка. Динамический Linq позволяет вам указывать ваши аргументы выражения lambda linq как строки, но вам все равно нужно напрямую указывать методы расширения (.Select, .Where) ваших операторов linq. –

+0

было бы неплохо не использовать динамический linq, а исключительно из System.Linq.Expressions –

0

Я не знаю, если есть более простой способ, но я написал лексер и анализатор для выражений SQL в обычай Abstract Syntax Tree (так как я не знаю, о Expression Trees .NET в в то время), и мне не очень понравилось разбор SQL.

Синтаксис просто не очень разобрать дружественным, поскольку порядок отличается в зависимости от контекста (например, не в NOT IN VS. IS NOT), маркеры перегружен (скобка для подмены приоритета оператора по умолчанию против скобки для создания списка как в WHERE x IN (1, 2)) и так далее.

Очевидно, использование генератора синтаксического анализатора вместо того, чтобы выполнять собственные лексики и синтаксический анализ, облегчит вам работу, но я не знаю, есть ли что-то более специфичное для SQL.

Итак, написание собственного, безусловно, возможно, хотя и утомительно.

Смежные вопросы