internal Expression GetExprssion <T>( ParameterExpression parameter, Func <string, Type, object> valueDeserializationFunctionFromUpTree = null, Dictionary <string, OperatorHandler> operatorToExpressionConvertorsOverridesFromUpTree = null) { var deserializationFunction = ValueDeserializationFunctionOverride ?? valueDeserializationFunctionFromUpTree; var operatorToExpressionConvertersOverrides = OperatorToExpressionConvertersOverrides ?? operatorToExpressionConvertorsOverridesFromUpTree; if (Filter != null) { return(GetExpresionFromCondition <T>(parameter, deserializationFunction, operatorToExpressionConvertersOverrides)); } if (LeftTreeNode == null || RightTreeNode == null) { throw new InvalidOperationException("FilterTreeNode requires either Filter or LeftTreeNode and RightTreeNode."); } if (LogicalOperator == LogicalOpertor.AND) { return(Expression.And( LeftTreeNode.GetExprssion <T>(parameter, deserializationFunction, operatorToExpressionConvertersOverrides), RightTreeNode.GetExprssion <T>(parameter, deserializationFunction, operatorToExpressionConvertersOverrides))); } return(Expression.Or( LeftTreeNode.GetExprssion <T>(parameter, deserializationFunction, operatorToExpressionConvertersOverrides), RightTreeNode.GetExprssion <T>(parameter, deserializationFunction, operatorToExpressionConvertersOverrides))); }