コード例 #1
0
        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");
        }
コード例 #2
0
        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");
        }