Я ищу способ разбора условного выражения на строку.Условные выражения для строковых выражений
Лучший пример, который я могу придумать, это LINQ-to-SQL. Он использует ExpressionVisitors для форматирования предложений «Где». Пример:
from a in b where a.x == 5 && a.y < 3 select a
Это было бы перевести на следующую строку (примерно, MSSQL не тока для меня):
"SELECT * FROM b WHERE x = 5 AND y < 3"
Из того, что я читал, это было сделано с помощью класса ExpressionVisitor, а объясняется в этой статье: http://blogs.msdn.com/b/mattwar/archive/2007/07/31/linq-building-an-iqueryable-provider-part-ii.aspx
Теперь проблема в том, что я не использую LINQ, но мне нужна эта конкретная функциональность. Есть ли способ разбора такого состояния? Я готов сделать что-нибудь с отражением, делегатов, лямбда и т.д.
Честно говоря, я не думаю, что это возможно, но мой мозг немного обжаренные (читай: хорошо, если вопрос смешно) , поэтому я решил, что могу просто дать S/O попробовать.
EDIT: Заключительный пример использования:
// Usage:
foo.Bar(foo => foo.X == 5 && foo.Y < 3)
// Ideal string output (variable name (foo) is not needed):
"foo.X == 5 && foo.Y < 3"
EDIT 2: Да, число может быть меньше 3 и равно 5. Рассказал вам мой мозг жарится.
LINQ к SQL делает именно это. Если вы напишете свое собственное, вы бы пересмотрели LINQ-to-SQL, который уже существует - это кажется бессмысленным усилием. (Тем не менее, люди это сделали, например, Google для IQToolkit.) Вы сказали: «Я не использую LINQ», но ваш код говорит об обратном (он полон LINQ; деревья выражений считаются частью LINQ). – Timwi