我正在创建一个Web项目,用户在其中输入一些过滤条件,并将数据呈现给网格。标准将传递给Rest Service,并将基于服务器上定义的模型类中定义的属性。
示例:我们假设该服务返回巧克力,用户请求如下所示:
((ChocolateColor == DarkBlack) || (ChocolateColor == White) &&
ChocolatePrice > 1.5 Euros) || ChocolateOwner == "ChocoMan"
我希望能够提取过滤器运行时并将其转换为针对我的模型类的过滤器。而不是创建大量的代码解析过滤器是否有更聪明的方法来应用我的过滤器?
过滤器将直接作为布尔表达式给出,或者使用GUI构建。
答案 0 :(得分:2)
我认为实际上需要大量的代码,但也许有人已经为你做过。有多次尝试实现动态表达式评估器,我个人没有测试任何,但这是一个例子: https://netmatze.wordpress.com/2013/03/04/implementing-expression-evaluator-in-c/
从示例中,可以执行以下操作:
Person person = new Person() { Name = "Mathias", Age = 36, Children = 2, Married = true };
var ruleText = " (Children = 2 && Married = true) || Age > 36 ";
Evaluator evaluator = new Evaluator();
var evaluatorResult = evaluator.Evaluate<Person>(ruleText, person);
现在,看起来您可以使用此引擎并适应您的要求,但这可能是“试验和苦难的路径”。
此外,您仍然远离您提供的任何关键字(例如linq或rest)。当您在后端使用Entity Framework工作作为示例时,这将无法工作,因为此命令无法转换为SQL - 并且您不希望将编码为。