C #: Como analisar seqüências de caracteres arbitrárias em árvores de expressã

Em um projeto no qual estou trabalhando, tenho que trabalhar com uma fonte de dados bastante estranha. Posso fazer uma "consulta" e ele retornará uma DataTable. Mas a consulta não é uma sequência tradicional. É mais como ... um conjunto de chamadas de método que definem os critérios que eu quero. Algo nesse sentido:

var tbl = MySource.GetObject("TheTable");
tbl.AddFilterRow(new FilterRow("Column1", 123, FilterRow.Expression.Equals));
tbl.AddFilterRow(new FilterRow("Column2", 456, FilterRow.Expression.LessThan));
var result = tbl.GetDataTable();

Em essência, ele suporta todo o material padrão (operadores booleanos, parênteses, algumas funções etc.), mas a sintaxe para escrevê-lo é bastante detalhada e desconfortável para o uso diári

Eu queria fazer um pequeno analisador que analisasse uma determinada expressão (como"Column1 = 123 AND Column2 < 456") e converta-o para as chamadas de função acima. Além disso, seria bom se eu pudesse adicionar parâmetros lá, para estar protegido contra ataques de injeção. O último pequeno pedaço de açúcar na parte superior seria se pudesse armazenar em cache os resultados da análise e reutilizá-los quando a mesma consulta for executada novamente em outro objet

Então eu estava pensando - existem soluções existentes que eu poderia usar para isso ou terei que lançar meu próprio analisador de expressão? Não é muito complicado, mas se eu puder me poupar dois ou três dias de codificação e um monte de bugs para corrigir, valeria a pen

questionAnswers(4)

yourAnswerToTheQuestion