public void PredicatesTest() { // rule DTO var car = new CarDTO { Make = "Ford", Year = 2010, Model = "Expedition", AskingPrice = 10000.0000m, SellingPrice = 9000.0000m }; // build up some rules var carRule1 = new Rule("Year", "2010", "GreaterThanOrEqual"); var carRule2 = new Rule("AskingPrice", "10000.0000", "LessThanOrEqual"); var carRule3 = new Rule("Make", "Ford", "Equals"); var carRule4 = new Rule("Model", "Ex", "StartsWith"); //gets the excursion, explorer, expedition -gas guzzlers var re = new RuleEngine(); // Compile the rules as a seperate step Expression<Func<CarDTO, bool>> carRule1Exp = re.GetExpression<CarDTO>(carRule1); Expression<Func<CarDTO, bool>> carRule2Exp = re.GetExpression<CarDTO>(carRule2); Expression<Func<CarDTO, bool>> carRule3Exp = re.GetExpression<CarDTO>(carRule3); Expression<Func<CarDTO, bool>> carRule4Exp = re.GetExpression<CarDTO>(carRule4); // join the rules with fluent syntax ala predicate builder Expression<Func<CarDTO, bool>> compundedRule = carRule1Exp.Or(carRule2Exp).Or(carRule3Exp).Or(carRule4Exp); Func<CarDTO, bool> compiledRule = compundedRule.Compile(); Assert.AreEqual(true, compiledRule(car), "car"); }
public void StoreSomeRules() { // rule DTO var car = new CarDTO { Make = "Ford", Year = 2010, Model = "Expedition", AskingPrice = 10000.0000m, SellingPrice = 9000.0000m }; // build up some rules var carRule1 = new Rule("Year", "2010", "GreaterThanOrEqual"); var re = new RuleEngine(); // Get the rule expressions Expression<Func<CarDTO, bool>> carRule1Exp =re.GetExpression<CarDTO>(carRule1); // Save a rule Expression to the the list re.LoadRule("carrule", carRule1Exp); Assert.AreEqual(true, (re.GetRule<CarDTO>("carrule").Compile()(car)), "This car is greater than or equal to year 2010 but failed to rule as such"); }