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