C#高级查询语句字符串处理
我正在寻找将字符串处理成对象树的最佳实践或库 以下是一个例子: “[年龄]=“37”和[性别]不为空,[optindate]>'2003/01/01'和[idnumber]为空,([saresident]=“52”或[公民身份]如'abc%')” 我应该能够将其对象化为一棵树,类似这样:C#高级查询语句字符串处理,c#,.net,oop,string,C#,.net,Oop,String,我正在寻找将字符串处理成对象树的最佳实践或库 以下是一个例子: “[年龄]=“37”和[性别]不为空,[optindate]>'2003/01/01'和[idnumber]为空,([saresident]=“52”或[公民身份]如'abc%')” 我应该能够将其对象化为一棵树,类似这样: {attribute='age', operator='=', value='37', opperand='And'} {attribute='gender', operator='Is Not Null',
{attribute='age', operator='=', value='37', opperand='And'}
{attribute='gender', operator='Is Not Null', value='', opperand='And'}
{attribute='optindate', operator='>', value='2003/01/01', opperand='And'}
等等
任何建议都很好 你的房间怎么样?您可以使用“原样”,或者查看它如何构建
表达式谓词(即树)。查看如果需要将操作存储在树结构中,则应使用后缀或前缀表示法。
e、 g.年龄=37,性别不为空
应存储为
和=37岁!=性别无效
所以这棵树应该是这样的
and
= !=
age 37 gender null
您可以使用这些链接了解更多详细信息:问题是字符串是由适当的筛选器控件生成的。我需要将sting转换为表达式树之类的东西?根据我上面的评论,很遗憾,我无法控制filtercontrol返回的字符串?不,我不是建议您更改字符串。我的建议是树结构应该使用前缀符号。也就是说,“和”应该是根“=”和“!=”“和”的孩子等等。所有操作数都应该是相应运算符的叶节点和子节点。因此,当需要计算表达式时,应该相应地解析树。编辑我的响应以添加两个链接供您参考我必须提到,表达式将用于查询EAV架构中的数据(请不要评论)?因此,我需要将其构建到ExpressionTree(或其他)中,然后递归并构建必要的SQL查询。