/// <summary> /// Visits a QueryExpression tree whose root node is the LinqSelectExpression. /// </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(LinqSelectExpression expression) { string source = this.ComputeUriInternal(expression.Source); LinqNewExpression newExpression = expression.Lambda.Body as LinqNewExpression; LinqNewInstanceExpression newInstanceExpression = expression.Lambda.Body as LinqNewInstanceExpression; QueryPropertyExpression propertyExpression = expression.Lambda.Body as QueryPropertyExpression; string select = string.Empty; if (propertyExpression != null) { return(string.Format(CultureInfo.InvariantCulture, "{0}/{1}", source, propertyExpression.Name)); } else if (newExpression != null) { select = this.ExpressionConverter.Convert(newExpression); this.SetSelectQueryOption(select); this.hasQueryOption = true; return(string.Format(CultureInfo.InvariantCulture, "{0}{1}", source, string.Empty)); } else if (newInstanceExpression != null) { select = this.ExpressionConverter.Convert(newInstanceExpression); this.SetSelectQueryOption(select); this.hasQueryOption = true; return(string.Format(CultureInfo.InvariantCulture, "{0}{1}", source, string.Empty)); } return(source); }
/// <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(LinqNewExpression expression) { QueryExpression[] members = expression.Members.Select(this.ReplaceExpression).ToArray(); if (HasChanged(expression.Members, members)) { return(LinqBuilder.New(expression.MemberNames, members, expression.ExpressionType)); } return(expression); }
/// <summary> /// Evaluates the specified expression. /// </summary> /// <param name="expression">The expression to evaluate.</param> /// <returns>Value of the expression.</returns> public QueryValue Visit(LinqNewExpression expression) { QueryValue instance = ((QueryStructuralType)expression.ExpressionType).CreateNewInstance(); for (int i = 0; i < expression.Members.Count; ++i) { ((QueryStructuralValue)instance).SetValue(expression.MemberNames[i], this.Evaluate(expression.Members[i])); } return(instance); }
/// <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(LinqNewExpression expression) { var members = expression.Members.Select(this.ResolveTypes).ToList(); var type = new QueryAnonymousStructuralType(this.EvaluationStrategy); for (int i = 0; i < members.Count; i++) { type.Add(QueryProperty.Create(expression.MemberNames[i], members[i].ExpressionType)); } return(LinqBuilder.New(expression.MemberNames, members, type)); }
/// <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(LinqNewExpression expression) { CodeCreateAndInitializeObjectExpression result = null; result = new CodeCreateAndInitializeObjectExpression(); for (int i = 0; i < expression.Members.Count; i++) { CodeExpression member = this.GenerateCode(expression.Members[i]); member = this.FixupPropertyForPropertyInitializer(expression, expression.MemberNames[i], expression.Members[i], member); result.PropertyInitializers.Add(new KeyValuePair <string, CodeExpression>(expression.MemberNames[i], member)); } return(result); }
/// <summary> /// Visits a QueryExpression tree whose root node is the LinqNewExpression. /// </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(LinqNewExpression expression) { return string.Join(", ", expression.MemberNames.ToArray()); }
/// <summary> /// Visits a QueryExpression tree whose root node is the LinqNewExpression. /// </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(LinqNewExpression expression) { throw new TaupoNotSupportedException("Not supported"); }
/// <summary> /// Visits a QueryExpression tree whose root node is the LinqNewExpression. /// </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(LinqNewExpression expression) { return(string.Join(", ", expression.MemberNames.ToArray())); }