Exemplo n.º 1
0
        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)));
        }