【发布时间】:2019-08-03 09:50:22
【问题描述】:
我选择在我的项目中实现System.Linq.Dynamic 命名空间,我依赖于从字符串动态调用LINQ 表达式来针对我的底层对象。这允许在数据级别进行高度可配置的标准。
string expression = "x.Client == 100 && x.Insurers.Any(it == 2 || it == 3)";
var x = new MyObject() { Client = 100, Insurers = new int[] { 1, 2 }};
var p = Expression.Parameter(typeof(MyObject), "x");
var e = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { p }, null, expression);
bool result = e.Compile().DynamicInvoke(x); // True = condition met
我的问题是如何动态识别每个字符串表达式包含的条件数量,以便我可以为每个表达式赋予权重,并在发生重叠时选择权重最高的一个。 Regex可以工作,但必须有更高效和实用的东西,比如表达式树。
例如:
x.Client == 100 // Conditions = 1
x.Client == 100 && x.Insurers.Any(it == 3) // Conditions = 2
x.Client == 100 && x.Insurers.Any(it == 2 || it == 3) // Conditions = 3
【问题讨论】: