1

我有一个如下表:

规则步骤

StepID | Step Property | Step Condition Id | Step Value | Logical Operator | Next Step Id

其中一行可能如下:100、Name、200(表示等于)、AnyName、210(表示 And)、300(指向下一步 id)。

上面的意思是我应该评估一个规则,它有一个步骤说 Name 应该等于 AnyName 并且下一步由运算符 AND 链接。下一步可以说 - 年龄应该等于 10。

这些规则应针对具有 2 个属性 Age 和 Name 的对象 Person 进行评估。我必须验证人名是否为 AnyName 且 Age 是否为 10。

你能告诉我我该怎么做吗?有没有可以支持这个的库?C# 中是否有任何特定功能可以帮助我?

谢谢, - 迈克

4

3 回答 3

1

C# 中是否有任何特定功能可以帮助我?

就在这里。您可以从表中的数据构建LINQ 表达式树,将其动态编译为函数对象,然后针对目标对象执行生成的lambda 。图书馆需要一点时间来适应,但是你得到的结构非常强大而且速度非常快,所以花时间学习它的回报确实是巨大的。

于 2012-06-12T06:52:36.897 回答
0

您可以尝试通过 NuGet获得的LinqKit包中的PredicateBuilder 。

于 2012-06-12T06:53:17.507 回答
0

使用反射的快速而肮脏的例子:

bool CheckEqualityRule (object target, string propertyName, string testValue)
{
    var property = target.GetType().GetProperty(propertyName);
    var value = (string)property.GetValue(target, null);
    return value == testValue;
}
于 2012-06-12T06:54:56.923 回答