private GroupChildRulesetDefaultRuleBuilder(RuleEngineContext.RuleEngineContext context, RulesetBuilder <TEntity> ruleSetBuilder, GroupRuleSetBuilder <TEntity, TKey> groupRuleSetBuilder, IPropertyRuleExpressionParser <TEntity> propertyparser) { this._ruleSetBuilder = ruleSetBuilder; this._groupRuleSetBuilder = groupRuleSetBuilder; _defaultProp = ruleSetBuilder.WithDefaultRule(); }
private static void TestGrouping(List <UserProfile> lst, IRuleEngineContext context) { Console.WriteLine("##########################################################################################"); foreach (var item in lst) { Console.WriteLine("Employee: " + item.FirstName + " Bonus: " + item.DoubleProp("Bonus") + " Age: " + item.Age + " Salary:" + item.UserProfileDetails.Salary + " Overtime:" + item.Overtime); //item.Age = 40; } Console.WriteLine("##########################################################################################"); Console.WriteLine(); var grp = GroupRuleSetBuilder <UserProfile, UserProfile> .Create(context) //.WithAggregateInfo<double>("AvgBonus", AggregateFunction.Average, "{Bonus}*{UserProfileDetails.Salary}") //.WithAggregateInfo<double>("AvgBonus", AggregateFunction.Average, "{Bonus}*{Age}") //.WithAggregateInfo<double>("AvgBonus", AggregateFunction.Average, "{Bonus}*{UserProfileDetails.Dynamic}") .WithAggregateInfo <double>("AvgBonus", AggregateFunction.Average, "{Bonus}") .WithAggregateInfo <int>("MaxAge", AggregateFunction.Max, "{Age}") //.WithAggregateInfo<int>("MaxAge", AggregateFunction.Max, "int({Age}*{AvgBonus})") .WithAggregateInfo <double>("MinSalary", AggregateFunction.Min, "{UserProfileDetails.Salary}") .WithAggregateInfo <int>("CountOfRecords", AggregateFunction.Count, "") //.WithWhere("{Overtime} >100") .WithPlaceHolder("SalaryCheck", "{AvgBonus} + {MaxSalary}") //.WithGroupingKey("{Age} + 1, {UserProfileDetails.Salary}") .WithGroupingKey("{UserProfileDetails.Dynamic}") .WithRuleSet("Bonus Check") .WithHaving("{MaxAge}<40") .WithRule("{Bonus} > {AvgBonus}") .SetProperty("BonusStatus", "Bonus is greater than Average Bonus") .SetAction(t => Console.WriteLine("Number of Records: " + t.GetPropertyOfType <int>("CountOfRecords"))) .Attach() .WithRule("{Bonus} < {AvgBonus}") .SetProperty("BonusStatus", "Bonus is less than Average Bonus") .SetAction(t => Console.WriteLine("Number of Records: " + t.GetPropertyOfType <int>("CountOfRecords"))) .Attach() .DefaultRule() .SetProperty("BonusStatus", "Bonus is equal to Average Bonus") .SetAction(t => Console.WriteLine("Number of Records: " + t.GetPropertyOfType <int>("CountOfRecords"))) .Attach() .WithRuleSet("Age Check") .WithRule("{Age} < {MaxAge}") .SetProperty("AgeStatus", "Age is less than Max Age") .SetAction(t => Console.WriteLine("Number of Records: " + t.GetPropertyOfType <int>("CountOfRecords"))) .Attach() .DefaultRule() .SetProperty("AgeStatus", "Age is equal to Max Age") .SetAction(t => Console.WriteLine("Number of Records: " + t.GetPropertyOfType <int>("CountOfRecords"))) .Attach() .WithRuleSet("Salary Check") .WithRule("{UserProfileDetails.Salary} > {MinSalary}") .SetProperty("SalaryStatus", "Salary is Greater than min salary") .SetAction(t => Console.WriteLine("Number of Records: " + t.GetPropertyOfType <int>("CountOfRecords"))) .Attach() .WithRule("{UserProfileDetails.Salary} = {MinSalary}") .SetProperty("SalaryStatus", "Salary is equal min Salary") .SetAction(t => Console.WriteLine("Number of Records: " + t.GetPropertyOfType <int>("CountOfRecords"))) .Attach() .Attach() .Compile(); grp.Execute(lst); foreach (var item in lst) { Console.WriteLine("Name:" + item.FirstName); Console.WriteLine("Overtime:" + item.Overtime); Console.WriteLine("--------------------------------------"); Console.WriteLine("Salary Status: " + item.StringProp("SalaryStatus") + "\r\nAge Status: " + item.StringProp("AgeStatus") + "\r\nBonus Status: " + item.StringProp("BonusStatus") + "\r\nMax Age: " + item.IntProp("MaxAge") ); Console.WriteLine(); } }
internal static GroupChildRulesetDefaultRuleBuilder <TEntity, TKey> Create(RuleEngineContext.RuleEngineContext context, RulesetBuilder <TEntity> ruleSetBuilder, GroupRuleSetBuilder <TEntity, TKey> groupRuleSetBuilder, IPropertyRuleExpressionParser <TEntity> propertyparser) { return(new GroupChildRulesetDefaultRuleBuilder <TEntity, TKey>(context, ruleSetBuilder, groupRuleSetBuilder, propertyparser)); }