如何使用Rule#编写可处理多个类对象的NRules规则?
在NRules中用Rule#实现跨多类对象的规则
完全可以用Rule#实现你需要的跨类关联规则,以下是对应你需求的Rule#代码实现:
rule "NotifyCustomerAboutDiscount" when Customer customer exists Order o where o.Customer == customer && o.PercentDiscount > 0.0 then customer.NotifyAboutDiscount();
代码说明
Customer customer:匹配工作内存中的Customer实例,并将其命名为customer,供后续规则条件引用exists Order o where o.Customer == customer && o.PercentDiscount > 0.0:检查是否存在与当前customer关联,且PercentDiscount大于0的Order实例,这和你原代码中的Exists逻辑完全等价- 动作部分直接调用
customer.NotifyAboutDiscount(),实现你需要的业务操作
运行时创作支持
Rule#作为NRules的领域特定语言,天生支持运行时规则创作:
- 你可以让用户输入或编辑上述格式的Rule#脚本文本
- 使用NRules的
RuleParser解析脚本,再通过RuleCompiler编译为可执行的规则 - 将编译后的规则加载到规则引擎会话中,即可执行动态创作的规则
内容的提问来源于stack exchange,提问作者jnce
相关产品推荐
相关产品推荐

