/// <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(LinqUnionExpression expression) { var firstSource = this.GenerateCode(expression.FirstSource); var secondSource = this.GenerateCode(expression.SecondSource); return(firstSource.Call("Union", secondSource)); }
/// <summary> /// Evalutes the specified expression /// </summary> /// <param name="expression">The expression to evaluate.</param> /// <returns>Value of the expression</returns> public QueryValue Visit(LinqUnionExpression expression) { var firstSource = this.EvaluateCollection(expression.FirstSource); var secondSource = this.EvaluateCollection(expression.SecondSource); return(firstSource.Union(secondSource)); }
/// <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(LinqUnionExpression expression) { var firstSource = this.ReplaceExpression(expression.FirstSource); var secondSource = this.ReplaceExpression(expression.SecondSource); if (HasChanged(expression.FirstSource, firstSource) || HasChanged(expression.SecondSource, secondSource)) { return(new LinqUnionExpression(firstSource, secondSource, expression.ExpressionType)); } return(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(LinqUnionExpression expression) { var firstSource = this.ResolveTypes(expression.FirstSource); var secondSource = this.ResolveTypes(expression.SecondSource); var firstSourceType = ValidateSourceIsACollection(firstSource); var secondSourceType = ValidateSourceIsACollection(secondSource); // For now, only add support for primitive types ExceptionUtilities.Assert( ((IQueryClrType)firstSourceType.ElementType).ClrType.Equals(((IQueryClrType)secondSourceType.ElementType).ClrType), "Expecting same types in both collections."); return(new LinqUnionExpression(firstSource, secondSource, firstSourceType)); }
/// <summary> /// Visits a QueryExpression tree whose root node is the LinqUnionExpression. /// </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(LinqUnionExpression expression) { throw new TaupoNotSupportedException("Not supported"); }