/// <summary>
        /// Translates the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="queryId">The query id.</param>
        /// <returns></returns>
        public static string Translate(Expression expression, out int?queryId)
        {
            var visitor = new PredicateVisitor();

            visitor.Visit(expression);
            queryId = visitor.QueryId;
            return(visitor.FilterExpression);
        }
        /// <summary>
        /// Aligns the specified expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <returns></returns>
        public static Expression Align(Expression expression)
        {
            var binaryExpressionVisitor = new PredicateVisitor();

            return(binaryExpressionVisitor.Visit(expression));
        }