コード例 #1
0
ファイル: UriQueryVisitor.cs プロジェクト: zhonli/odata.net
        /// <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);
        }
コード例 #2
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(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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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));
        }
コード例 #5
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(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);
        }
コード例 #6
0
 /// <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());
 }
コード例 #7
0
 /// <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");
 }
コード例 #8
0
 /// <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()));
 }