private IRuleFilter CompileFilters(IRuleDefinition ruleDefinition, IList <Declaration> ruleDeclarations) { var conditions = new List <IActivationCondition>(); var keySelectors = new List <IActivationExpression>(); foreach (var filter in ruleDefinition.FilterGroup.Filters) { switch (filter.FilterType) { case FilterType.Predicate: var condition = ExpressionCompiler.CompileFilterCondition(filter, ruleDeclarations); conditions.Add(condition); break; case FilterType.KeyChange: var keySelector = ExpressionCompiler.CompileFilterExpression(filter, ruleDeclarations); keySelectors.Add(keySelector); break; default: throw new ArgumentOutOfRangeException($"Unrecognized filter type. FilterType={filter.FilterType}"); } } var compiledFilter = new RuleFilter(conditions, keySelectors); return(compiledFilter); }