private ISpecification <IEnumerable <Condition <TConditionType> > > BuildSpecification(IConditionNode <TConditionType> conditionNode, MatchModes matchMode) { return(conditionNode switch { IValueConditionNode <TConditionType> valueConditionNode => this.BuildSpecificationForValueNode(valueConditionNode, matchMode), ComposedConditionNode <TConditionType> composedConditionNode => this.BuildSpecificationForComposedNode(composedConditionNode, matchMode), _ => throw new NotSupportedException($"Unsupported condition node: '{conditionNode.GetType().Name}'."), });
public Func <IEnumerable <Condition <TConditionType> >, bool> GetDeferredEvalFor <TConditionType>(IValueConditionNode <TConditionType> valueConditionNode, MatchModes matchMode) { return(valueConditionNode switch { IntegerConditionNode <TConditionType> integerConditionNode => (conditions) => Eval <IntegerConditionNode <TConditionType>, TConditionType, int>(conditions, integerConditionNode, matchMode), DecimalConditionNode <TConditionType> decimalConditionNode => (conditions) => Eval <DecimalConditionNode <TConditionType>, TConditionType, decimal>(conditions, decimalConditionNode, matchMode), StringConditionNode <TConditionType> stringConditionNode => (conditions) => Eval <StringConditionNode <TConditionType>, TConditionType, string>(conditions, stringConditionNode, matchMode), BooleanConditionNode <TConditionType> booleanConditionNode => (conditions) => Eval <BooleanConditionNode <TConditionType>, TConditionType, bool>(conditions, booleanConditionNode, matchMode), _ => throw new NotSupportedException($"Unsupported value condition node: '{valueConditionNode.GetType().Name}'."), });