Example #1
0
        public void Execute(IEnumerable <TEntity> entity)
        {
            if (entity == null)
            {
                throw new ArgumentException("Entity cannot be null", "entity");
            }

            var groupEnumerable = entity.AsQueryable()
                                  .Where(e => entryPoint.Rulefunc(e))
                                  .GroupBy(GroupExpression);

            List <Grouping <TEntity> > groups = new List <Grouping <TEntity> >();

            foreach (var item in groupEnumerable)
            {
                var val      = (IGrouping <DynamicClass, TEntity>)item;
                var grouping = new Grouping <TEntity>(val.AsQueryable(), _aggregateProps);
                grouping.CreateAggregateProperties(val);
            }
            foreach (var item in groups)
            {
                foreach (var ruleEntity in item.Entity)
                {
                    item.CreateAggregateProperties(ruleEntity);

                    foreach (var ruleSet in _ruleSets)
                    {
                        ruleSet.Execute(ruleEntity);
                        if (ruleSet.HasSuccessRule())
                        {
                            _executedRuleSet.Add(ruleSet);
                        }
                    }
                }
            }
        }