示例#1
0
        /// <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));
        }
示例#2
0
        /// <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));
        }
示例#3
0
        /// <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));
        }
示例#5
0
 /// <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");
 }