/// <summary> /// Evaluates the specified expression. /// </summary> /// <param name="expression">The expression to evaluate.</param> /// <returns>Value of the expression.</returns> public QueryValue Visit(LinqFreeVariableExpression expression) { QueryExpression freeVariable; if (!this.freeVariableAssignments.TryGetValue(expression.Name, out freeVariable)) { freeVariable = expression.Values.First(); } return(this.Evaluate(freeVariable)); }
/// <summary> /// Replaces the given expression. /// </summary> /// <param name="expression">The root node of the expression tree being visited.</param> /// <returns>Replaced expression.</returns> public virtual QueryExpression Visit(LinqFreeVariableExpression expression) { QueryExpression[] values = expression.Values.Select(this.ReplaceExpression).ToArray(); if (HasChanged(expression.Values, values)) { return(new LinqFreeVariableExpression(expression.Name, expression.ExpressionType, values)); } return(expression); }
/// <summary> /// Generates System.CodeDom.CodeExpression from the given expression. /// </summary> /// <param name="expression">Expression from which System.CodeDom.CodeExpression is generated.</param> /// <returns>Generated System.CodeDom.CodeExpression.</returns> public virtual CodeExpression Visit(LinqFreeVariableExpression expression) { CodeFreeVariable codeFreeVariable; if (!this.freeVariables.TryGetValue(expression, out codeFreeVariable)) { IEnumerable <CodeExpression> values = expression.Values.Select(v => this.GenerateCode(v)); CodeTypeReference typeReference = this.GetTypeReference(expression.ExpressionType); codeFreeVariable = new CodeFreeVariable(expression.Name, typeReference, values); this.freeVariables.Add(expression, codeFreeVariable); } return(Code.Variable(codeFreeVariable.Name)); }
/// <summary> /// Visits a QueryExpression tree whose root node is the LinqFreeVariableExpression. /// </summary> /// <param name="expression">The root node of the expression tree being visited.</param> /// <returns>Uri query string representing the expression.</returns> public override string Visit(LinqFreeVariableExpression expression) { return expression.Values.Single().Accept(this); }
/// <summary> /// Visits a QueryExpression tree whose root node is the LinqFreeVariableExpression. /// </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(LinqFreeVariableExpression expression) { throw new TaupoNotSupportedException("Not supported"); }
/// <summary> /// Visits a QueryExpression tree whose root node is the LinqFreeVariableExpression. Free variable information is extracted. /// </summary> /// <param name="expression">The root node of the expression tree being visited.</param> /// <returns>Replaced expression.</returns> public override QueryExpression Visit(LinqFreeVariableExpression expression) { this.freeVariableAssignments.Add(expression.Name, expression.Values); return base.Visit(expression); }
/// <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(LinqFreeVariableExpression expression) { return(expression); }
/// <summary> /// Visits a QueryExpression tree whose root node is the LinqFreeVariableExpression. Free variable information is extracted. /// </summary> /// <param name="expression">The root node of the expression tree being visited.</param> /// <returns>Replaced expression.</returns> public override QueryExpression Visit(LinqFreeVariableExpression expression) { this.freeVariableAssignments.Add(expression.Name, expression.Values); return(base.Visit(expression)); }
/// <summary> /// Visits a QueryExpression tree whose root node is the LinqFreeVariableExpression. /// </summary> /// <param name="expression">The root node of the expression tree being visited.</param> /// <returns>Uri query string representing the expression.</returns> public override string Visit(LinqFreeVariableExpression expression) { return(expression.Values.Single().Accept(this)); }