标签: nrules

使用NRule的数据库驱动器规则引擎

我正在创建一个业务规则引擎,并计划向用户提供NRules框架。
https://github.com/NRules/NRules
但是我想知道是否可以从数据库本身生成规则。

我有一个数据库表,其中保存了一些规则。
年龄> 20
名=='约翰'

条件可以是多个,即使属性名称可以更改,也不会硬编码。

我浏览了一篇博客文章,该文章的内容相同,但使用表达式树。
http://coding-time.blogspot.in/2011/07/how-to-implement-rule-engine-in-c.html

我可以使用NRules框架实现相同的功能吗(如果可以),在这里我可以找到一些代码示例。

.net c# validationrules nrules

7
推荐指数
0
解决办法
1775
查看次数

NRules:匹配集合

我正在尝试找出 BRE NRules 并得到一些有效的示例,但很难匹配集合。

IEnumerable<Order> orders = null;

When()
    .Match<IEnumerable<Order>>(o => o.Where(c => c.Cancelled).Count() >= 3)
    .Collect<Order>(() => orders, o => o.Cancelled);

Then()
    .Do(ctx => orders.ToList().ForEach(o => o.DoSomething()));
Run Code Online (Sandbox Code Playgroud)

基本上我想要的是,如果有 3 个订单被取消,那么执行一些操作。但我似乎无法在集合上获得匹配,单个变量确实有效。

该程序:

var order3 = new Order(123458, customer, 2, 20.0);
var order4 = new Order(123459, customer, 1, 10.0);
var order5 = new Order(123460, customer, 1, 11.0);

order3.Cancelled = true;
order4.Cancelled = true;
order5.Cancelled = true;

session.Insert(order3);
session.Insert(order4);
session.Insert(order5);

session.Fire();
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

c# rete nrules

2
推荐指数
1
解决办法
4084
查看次数

如何在NRules中进行最佳写规则定义

NRules SimpleRule的代码定义了以下规则:

public class PreferredCustomerDiscountRule : Rule
{
    public override void Define()
    {
        Customer customer = null;
        IEnumerable<Order> orders = null;

        When()
            .Match<Customer>(() => customer, c => c.IsPreferred)
            .Collect<Order>(() => orders,
                o => o.Customer == customer,
                o => o.IsOpen,
                o => !o.IsDiscounted);

        Then()
            .Do(ctx => ApplyDiscount(orders, 10.0))
            .Do(ctx => LogOrders(orders))
            .Do(ctx => orders.ToList().ForEach(ctx.Update));
    }
        ...
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么条件是单独的pareameters而不是仅使用&&运算符,即以下将具有相同的效果?

public class PreferredCustomerDiscountRule : Rule
{
    public override void Define()
    {
        Customer customer = null;
        IEnumerable<Order> orders = null;

        When()
            .Match<Customer>(() => customer, …
Run Code Online (Sandbox Code Playgroud)

c# rete nrules

1
推荐指数
1
解决办法
1367
查看次数

如何使用NRules创建验证规则?

我刚刚发现了.NET的NRules。我想创建一个规则,以防止在字段/属性值无效时构造对象。例如,给定以下类:

public class Customer
{
    public string Name { get; private set; }
    public bool IsPreferred { get; set; }

    public Customer(string name)
    {
        Name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望创建一个规则,当“名称”为null或为空时,该规则将引发异常,从而取消对象创建以及生成用户定义的消息:必须指定客户名称。

可以使用NRules完成此操作吗?

nrules

1
推荐指数
1
解决办法
1678
查看次数

在 NRULES 中实现前向链接的最佳方式

我想根据前一个规则的结果运行一个规则。如何使用前向链接实现此功能?我不想为每个规则创建不同的类对象来实现前向链接。

在此示例中,仅为这一规则创建了一个 InstantDiscount 对象以实现前向链接。

public class PreferredCustomerDiscountRule : Rule
{
    public override void Define()
    {
        Customer customer = null;
        IEnumerable<Order> orders = null;
        Double total = Double.NaN;

        When()
            .Match<Customer>(() => customer, c => c.IsPreferred)
            .Query(() => orders, x => x
                .Match<Order>(
                    o => o.Customer == customer,
                    o => o.IsOpen)
                .Collect())
            .Let(() => total, () => orders.Sum(x => x.Amount))
            .Having(() => total > 1000);

        Then()
            .Yield(_ => new InstantDiscount(customer, total * 0.05));
    }
}

public class PrintInstantDiscountRule : Rule
{
    public …
Run Code Online (Sandbox Code Playgroud)

nrules

1
推荐指数
1
解决办法
1786
查看次数

标签 统计

nrules ×5

c# ×3

rete ×2

.net ×1

validationrules ×1