예제 #1
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(LinqMemberMethodExpression expression)
        {
            var resolvedSource     = this.ResolveTypes(expression.Source, this.EvaluationStrategy);
            var resolvedResultType = this.GetDefaultQueryType(expression.MemberMethod.ReturnType);
            var resolvedArguemnts  = this.ResolveTypesForArguments(expression.Arguments);

            return(new LinqMemberMethodExpression(resolvedSource, expression.MemberMethod, resolvedResultType, resolvedArguemnts));
        }
            public override string Visit(LinqMemberMethodExpression expression)
            {
                ExceptionUtilities.CheckArgumentNotNull(expression, "expression");

                var convertedArguments = expression.Arguments.Select(a => this.Convert(a)).ToList();

                convertedArguments.Insert(0, this.Convert(expression.Source));
                string argValues = string.Join(",", convertedArguments.ToArray());

                return(string.Format(CultureInfo.InvariantCulture, "{0}({1})", expression.MemberMethod.FullName.ToLowerInvariant(), argValues));
            }
예제 #3
0
        /// <summary>
        /// Generates System.CodeDom.CodeExpression from the given expression.
        /// </summary>
        /// <param name="expression">The root node of the expression tree being visited.</param>
        /// <returns>The result of visiting this expression.</returns>
        public virtual CodeExpression Visit(LinqMemberMethodExpression expression)
        {
            var instance         = this.GenerateCode(expression.Source);
            var arguments        = this.GenerateCodeForArguments(expression.Arguments).ToArray();
            var memberAnnotation = expression.MemberMethod.Annotations.OfType <MemberInSpatialTypeAnnotation>().FirstOrDefault();

            ExceptionUtilities.CheckObjectNotNull(memberAnnotation, "Currently only spatial types have member methods. The method must include MemberInSpatialTypeAnnotation.");
            if (memberAnnotation.IsStaticMember == true)
            {
                return(new CodeTypeReferenceExpression(((QueryMappedScalarTypeWithStructure)expression.Source.ExpressionType).ClrType).Call(expression.MemberMethod.Name, arguments));
            }

            return(instance.Call(expression.MemberMethod.Name, arguments));
        }
예제 #4
0
        /// <summary>
        /// Visits a QueryExpression tree whose root node is the LinqMemberMethodExpression.
        /// </summary>
        /// <param name="expression">The root node of the expression tree being visited.</param>
        /// <returns>Replaced expression.</returns>
        public virtual QueryExpression Visit(LinqMemberMethodExpression expression)
        {
            var source            = this.ReplaceExpression(expression.Source);
            var replacedArguments = this.ReplaceArguments(expression.Arguments);

            if (this.HasChanged(expression.Source, source) || this.HasChanged(expression.Arguments.ToList(), replacedArguments))
            {
                return(new LinqMemberMethodExpression(source, expression.MemberMethod, expression.ExpressionType, replacedArguments.ToArray()));
            }
            else
            {
                return(expression);
            }
        }
            public override string Visit(LinqMemberMethodExpression expression)
            {
                ExceptionUtilities.CheckArgumentNotNull(expression, "expression");

                var convertedArguments = expression.Arguments.Select(a => this.Convert(a)).ToList();
                convertedArguments.Insert(0, this.Convert(expression.Source));
                string argValues = string.Join(",", convertedArguments.ToArray());

                return string.Format(CultureInfo.InvariantCulture, "{0}({1})", expression.MemberMethod.FullName.ToLowerInvariant(), argValues);
            }
예제 #6
0
 /// <summary>
 /// Visits a QueryExpression tree whose root node is the LinqMemberMethodExpression.
 /// </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(LinqMemberMethodExpression expression)
 {
     throw new TaupoNotSupportedException("Not supported");
 }
예제 #7
0
 /// <summary>
 /// Evaluates the specified expression.
 /// </summary>
 /// <param name="expression">The expression to evaluate.</param>
 /// <returns>Value of the expression.</returns>
 public virtual QueryValue Visit(LinqMemberMethodExpression expression)
 {
     return(this.EvaluateMemberMethod(expression.Source, expression.ExpressionType, expression.MemberMethod, expression.Arguments));
 }