您可以将规则存储为AST-实现一些表示树节点的类:
interface INode{}enum BinaryOperator { AND, OR, Equal, Greater, Lower;}class Binaryexpression : INode{ BinaryOperator Operator { get; set; } INode Left { get; set; } INode Right { get; set; } }class PropertyRerefence : INode{ string PropertyName { get; set; }}class Constant : INode{ string Value { get; set; }}您的示例树如下所示:
Binaryexpression(OR) Left=Binaryexpression(AND) Left=... Right=... Right=Binaryexpression(Greater) Left=PropertyReference("Number") Right=Constant("12")然后,您可以使用序列化(最好的JSON或XML,如果您不关心db的可读性,甚至可以使用二进制)来保存此类树。反序列化时,您无需进行任何解析,就可以遍历树来填充菜单。
使用AST时,也很容易打印“(名称=’John’AND姓氏=’Smith’)或数字>
12”-对于Binaryexpression:向左打印,向右打印操作符,向右打印。



