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); } } } } }