/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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); } }
/// <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)); } }
/// <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"); }