private StatementQueryOperatorExpression ConvertOperatorExpression(QueryTreeOperatorExpression source)
        {
            StatementQueryOperatorExpression result = new StatementQueryOperatorExpression();

            foreach (var a in source.Arguments)
            {
                result.Arguments.Add(Convert(a));
            }
            result.OperatorID   = source.OperatorID;
            result.ResultDbType = source.ResultDbType;
            result.ResultTypeID = source.ResultTypeID;
            return(result);
        }
 private QueryTreeExpression Convert(ExpressionResult source)
 {
     if (source is ConstExpressionResult)
     {
         var r = (ConstExpressionResult)source;
         return(new QueryTreeConstExpression()
         {
             DbType = r.DbType, TypeID = r.TypeID
         });
     }
     else if (source is AttributeExpressionResult)
     {
         var r = (AttributeExpressionResult)source;
         return(new QueryTreeAttributeExpression()
         {
             DbType = r.DbType, TypeID = r.TypeID, AttributeNumber = r.AttributeNumber, RelationID = r.RelationID
         });
     }
     else if (source is FunctionExpressionResult)
     {
         var r      = (FunctionExpressionResult)source;
         var result = new QueryTreeFunctionExpression()
         {
             ResultDbType = r.ResultDbType, ResultTypeID = r.ResultTypeID
         };
         foreach (var a in r.Arguments)
         {
             result.Arguments.Add(Convert(a));
         }
         return(result);
     }
     else if (source is OperatorExpressionResult)
     {
         var r      = (OperatorExpressionResult)source;
         var result = new QueryTreeOperatorExpression()
         {
             OperatorID = r.OperatorID, ResultDbType = r.ResultDbType, ResultTypeID = r.ResultTypeID
         };
         foreach (var a in r.Arguments)
         {
             result.Arguments.Add(Convert(a));
         }
         return(result);
     }
     else if (source is AggregateExpressionResult)
     {
         var r      = (AggregateExpressionResult)source;
         var result = new QueryTreeAggregateExpression();
         foreach (var a in r.Arguments)
         {
             result.Arguments.Add(Convert(a));
         }
         return(result);
     }
     else if (source is BooleanExpressionResult)
     {
         var r      = (BooleanExpressionResult)source;
         var result = new QueryTreeBooleanExpression()
         {
             Operator = r.Operator
         };
         foreach (var a in r.Arguments)
         {
             result.Arguments.Add(Convert(a));
         }
         return(result);
     }
     else if (source is NullTestExpressionResult)
     {
         var r = (NullTestExpressionResult)source;
         return(new QueryTreeNullTestExpression()
         {
             Argument = Convert(r.Argument), TestType = Convert(r.TestType)
         });
     }
     return(new QueryTreeUnknownExpression());
 }