SQL заявление в дереве выражений - PullRequest
7 голосов
/ 15 мая 2010

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

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

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

Ответы [ 2 ]

0 голосов
/ 13 июля 2012

Я не знаю, есть ли более простой способ, но я написал лексер и парсер для выражений SQL в собственном дереве абстрактного синтаксиса (поскольку я не знал о деревьях выражений .net в .net на время) и мне не очень понравился парсинг SQL.

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

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

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

0 голосов
/ 15 мая 2010

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

...