Vil*_*lx- 4 .net c# parsing expression-trees
在我正在开发的项目中,我必须使用相当奇怪的数据源.我可以给它一个"查询",它会返回一个DataTable.但查询不是传统的字符串.它更像是......一组定义我想要的标准的方法调用.这些方面的东西:
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();
Run Code Online (Sandbox Code Playgroud)
本质上,它支持所有标准的东西(布尔运算符,parantheses,一些函数等),但是编写它的语法对于日常使用来说非常冗长和不舒服.
我想创建一个解析给定表达式的小解析器(比如"Column1 = 123 AND Column2 < 456")并将其转换为上面的函数调用.此外,如果我可以在那里添加参数,那将是很好的,所以我将受到保护免受注入攻击.顶部的最后一小块糖将是如果它可以缓存解析结果并在要在另一个对象上重新执行相同的查询时重用它们.
所以我想知道 - 我可以使用任何现有的解决方案,还是我必须推出自己的表达式解析器?这不是太复杂,但如果我能节省两到三天的编码和一大堆错误来修复,那将是值得的.