コード例 #1
0
 /// <summary>
 /// Visits a LinqToAstoriaConditionalExpression.
 /// </summary>
 /// <param name="expression">The expression.</param>
 /// <returns>The result of visiting this expression.</returns>
 public CodeExpression Visit(LinqToAstoriaConditionalExpression expression)
 {
     return(Code.Ternary(
                this.GenerateQueryCode(expression.Condition).Expression,
                this.GenerateQueryCode(expression.IfTrue).Expression,
                this.GenerateQueryCode(expression.IfFalse).Expression));
 }
コード例 #2
0
            /// <summary>
            /// Visits a QueryExpression tree whose root node is the LinqToAstoriaConditionalExpression.
            /// </summary>
            /// <param name="expression">The root node of the expression tree being visited.</param>
            /// <returns>The result of visiting this expression.</returns>
            public Expression Visit(LinqToAstoriaConditionalExpression expression)
            {
                var condition = this.GenerateLinqExpression(expression.Condition);
                var ifTrue    = this.GenerateLinqExpression(expression.IfTrue);
                var ifFalse   = this.GenerateLinqExpression(expression.IfFalse);

                return(Expression.Condition(condition, ifTrue, ifFalse));
            }
コード例 #3
0
        /// <summary>
        /// Resolves types for the specified expression.
        /// </summary>
        /// <param name="expression">The expression to resolve types for.</param>
        /// <returns>Expression with resolved types.</returns>
        public QueryExpression Visit(LinqToAstoriaConditionalExpression expression)
        {
            var condition = this.ResolveTypes(expression.Condition);
            var ifTrue    = this.ResolveTypes(expression.IfTrue);
            var ifFalse   = this.ResolveTypes(expression.IfFalse);

            ExceptionUtilities.Assert(ifTrue.ExpressionType.IsAssignableFrom(ifFalse.ExpressionType), "The ifTrue and ifFalse expression types should be the same");
            return(new LinqToAstoriaConditionalExpression(condition, ifTrue, ifFalse, ifTrue.ExpressionType));
        }
コード例 #4
0
            /// <summary>
            /// Visits a QueryExpression tree whose root node is the LinqToAstoriaConditionalExpression.
            /// </summary>
            /// <param name="expression">The root node of the expression tree being visited.</param>
            /// <returns>The result of visiting this expression.</returns>
            public Expression Visit(LinqToAstoriaConditionalExpression expression)
            {
                var condition = this.GenerateLinqExpression(expression.Condition);
                var ifTrue    = this.GenerateLinqExpression(expression.IfTrue);
                var ifFalse   = this.GenerateLinqExpression(expression.IfFalse);

#if WIN8
                if (ifTrue.Type != ifFalse.Type && ifTrue.Type.IsAssignableFrom(ifFalse.Type))
                {
                    return(Expression.Condition(condition, Expression.TypeAs(ifTrue, ifFalse.Type), ifFalse));
                }
#endif

                return(Expression.Condition(condition, ifTrue, ifFalse));
            }
コード例 #5
0
        /// <summary>
        /// Visits a QueryExpression tree whose root node is the LinqConditionalExpression.
        /// </summary>
        /// <param name="expression">The root node of the expression tree being visited.</param>
        /// <returns>Replaced expression.</returns>
        public virtual QueryExpression Visit(LinqToAstoriaConditionalExpression expression)
        {
            QueryExpression condition = this.ReplaceExpression(expression.Condition);
            QueryExpression ifTrue    = this.ReplaceExpression(expression.IfTrue);
            QueryExpression ifFalse   = this.ReplaceExpression(expression.IfFalse);

            if (HasChanged(expression.Condition, condition) || HasChanged(expression.IfTrue, ifTrue) || HasChanged(expression.IfFalse, ifFalse))
            {
                return(new LinqToAstoriaConditionalExpression(condition, ifTrue, ifFalse, expression.ExpressionType));
            }
            else
            {
                return(expression);
            }
        }
コード例 #6
0
            /// <summary>
            /// Evaluates the specified expression.
            /// </summary>
            /// <param name="expression">The expression to evaluate.</param>
            /// <returns>Value of the expression.</returns>
            public virtual QueryValue Visit(LinqToAstoriaConditionalExpression expression)
            {
                var binaryQueryExpressionValue = (QueryScalarValue)expression.Condition.Accept(this);

                ExceptionUtilities.CheckObjectNotNull(binaryQueryExpressionValue, "Conditional expression evaluated to null");

                bool binaryValue = (bool)binaryQueryExpressionValue.Value;

                if (binaryValue)
                {
                    return(expression.IfTrue.Accept(this));
                }
                else
                {
                    return(expression.IfFalse.Accept(this));
                }
            }
コード例 #7
0
 /// <summary>
 /// Visits a QueryExpression tree whose root node is the LinqToAstoriaConditionalExpression.
 /// </summary>
 /// <param name="expression">The root node of the expression tree being visited.</param>
 /// <returns>Uri query string representing the expression.</returns>
 public virtual string Visit(LinqToAstoriaConditionalExpression expression)
 {
     throw new TaupoNotSupportedException("Not supported");
 }