예제 #1
0
        /// <summary>
        /// Loads the expressions.
        /// </summary>
        private void LoadExpressions()
        {
            ExpressionDto dto = ExpressionManager.GetExpressionDto(ExpressionCategory.GetExpressionCategory(ExpressionCategory.CategoryKey.Policy).Key);

            ddlExpression.DataSource = dto;
            ddlExpression.DataBind();
        }
예제 #2
0
        internal object ProcessExpression(Expression expression, bool isEnumerable)
        {
            string empty;
            Tracer tracer  = new Tracer();
            Tracer tracer1 = tracer;
            string str     = "LinqQueryProvider";
            string str1    = "ProcessExpression";
            string str2    = isEnumerable.ToString();

            if (expression == null)
            {
                empty = string.Empty;
            }
            else
            {
                empty = expression.ToString();
            }
            tracer1.MethodCall2(str, str1, str2, empty);
            if (expression != null)
            {
                expression = WhereExpressionOptimizer.GetOptimizedExpression(expression, this.initialQueryable, this.initialResourceRoot.ResourceType);
                Expression            expression1           = null;
                InnermostCmdletFinder innermostCmdletFinder = new InnermostCmdletFinder();
                ExpressionCategory    expressionCategory    = ExpressionCategory.Unhandled;
                while (innermostCmdletFinder.GetInnermostCmdletExpression(expression, this.initialQueryable, this.GetEntityMetadata(this.initialResourceRoot.ResourceType), out expression1, out expressionCategory))
                {
                    expression = this.ProcessCmdletExpression(expression, expression1, expressionCategory, isEnumerable);
                }
                return(this.EvaluateByLinqToObjects(expression));
            }
            else
            {
                throw new ArgumentNullException();
            }
        }
예제 #3
0
        /// <summary>
        /// Loads the expressions.
        /// </summary>
        /// <param name="iStartIndex">Start index of the i.</param>
        /// <param name="iNumItems">The i num items.</param>
        /// <param name="sFilter">The s filter.</param>
        private void LoadExpressions(int iStartIndex, int iNumItems, string sFilter)
        {
            ExpressionDto dto = ExpressionManager.GetExpressionDto(ExpressionCategory.GetExpressionCategory(ExpressionCategory.CategoryKey.Promotion).Key);

            ExpressionFilter.DataSource = dto.Expression;
            ExpressionFilter.DataBind();
        }
예제 #4
0
        internal Expression ProcessCmdletExpression(Expression rootExpression, Expression cmdletExpression, ExpressionCategory category, bool isEnumerable)
        {
            if (TraceHelper.IsEnabled(5))
            {
                object[] objArray = new object[6];
                objArray[0] = "ProcessCmdletExpression:\nRootExpression: ";
                objArray[1] = rootExpression;
                objArray[2] = "\nCmdletExpression: ";
                objArray[3] = cmdletExpression;
                objArray[4] = "\nExpression category:";
                objArray[5] = category;
                TraceHelper.Current.DebugMessage(string.Concat(objArray));
            }
            ExpressionCategory expressionCategory = category;

            switch (expressionCategory)
            {
            case ExpressionCategory.ResourceRoot:
            {
                return(this.ProcessResourceRoot(rootExpression, cmdletExpression as ConstantExpression));
            }

            case ExpressionCategory.WhereOfResourceRoot:
            {
                return(this.ProcessWhereWithResourceRoot(rootExpression, cmdletExpression as MethodCallExpression, false));
            }

            case ExpressionCategory.WhereInsideNavPropertyWithGetRefCmdlet:
            {
                return(this.ProcessWhereWithResourceRoot(rootExpression, cmdletExpression as MethodCallExpression, true));
            }

            case ExpressionCategory.NestedPropertyComparisons:
            {
                return(this.ProcessNestedWhereOfResourceRoot(rootExpression, cmdletExpression as MethodCallExpression, false));
            }

            case ExpressionCategory.NestedPropertyComparisonsInsideNavPropertyWithGetRefCmdlet:
            {
                return(this.ProcessNestedWhereOfResourceRoot(rootExpression, cmdletExpression as MethodCallExpression, true));
            }

            case ExpressionCategory.WhereOfResultSet:
            {
                return(this.ProcessSelectExpansion(rootExpression, cmdletExpression as MethodCallExpression));
            }

            case ExpressionCategory.SelectNavProperty:
            {
                return(this.ProcessSelectExpansion(rootExpression, cmdletExpression as MethodCallExpression));
            }

            case ExpressionCategory.SelectExpansion:
            {
                return(this.ProcessSelectExpansion(rootExpression, cmdletExpression as MethodCallExpression));
            }
            }
            throw new NotImplementedException();
        }
예제 #5
0
		protected override Expression VisitConstant(ConstantExpression expression)
		{
			object value = expression.Value;
			IQueryable<DSResource> dSResources = value as IQueryable<DSResource>;
			if (dSResources == this.resourceRoot)
			{
				this.cmdletExpression = expression;
				this.category = ExpressionCategory.ResourceRoot;
			}
			return expression;
		}
예제 #6
0
		public bool GetInnermostCmdletExpression(Expression tree, IQueryable<DSResource> resourceRoot, EntityMetadata entityMetadata, out Expression innermost, out ExpressionCategory category)
		{
			this.category = ExpressionCategory.Unhandled;
			this.cmdletExpression = null;
			this.resourceRoot = resourceRoot;
			this.entityMetadata = entityMetadata;
			this.Visit(tree);
			innermost = this.cmdletExpression;
			category = this.category;
			return (int)category != 8;
		}
예제 #7
0
 public bool GetInnermostCmdletExpression(Expression tree, IQueryable <DSResource> resourceRoot, EntityMetadata entityMetadata, out Expression innermost, out ExpressionCategory category)
 {
     this.category         = ExpressionCategory.Unhandled;
     this.cmdletExpression = null;
     this.resourceRoot     = resourceRoot;
     this.entityMetadata   = entityMetadata;
     this.Visit(tree);
     innermost = this.cmdletExpression;
     category  = this.category;
     return((int)category != 8);
 }
예제 #8
0
        protected override Expression VisitConstant(ConstantExpression expression)
        {
            object value = expression.Value;
            IQueryable <DSResource> dSResources = value as IQueryable <DSResource>;

            if (dSResources == this.resourceRoot)
            {
                this.cmdletExpression = expression;
                this.category         = ExpressionCategory.ResourceRoot;
            }
            return(expression);
        }
예제 #9
0
		protected override Expression VisitMethodCall(MethodCallExpression expression)
		{
			if (expression.Method.Name != "Where")
			{
				if (expression.Method.Name != "Select")
				{
					if (expression.Method.Name != "SelectMany")
					{
						this.navigationProperty = null;
					}
					else
					{
						this.cmdletExpression = expression;
						this.category = ExpressionCategory.SelectNavProperty;
						this.navigationProperty = ExpressionHelper.GetResourcePropertyFromSequence(expression.Arguments[1]);
					}
				}
				else
				{
					this.cmdletExpression = expression;
					this.category = ExpressionCategory.SelectExpansion;
					this.navigationProperty = null;
				}
			}
			else
			{
				if (!ExpressionHelper.IsResourceRoot(expression.Arguments[0], this.resourceRoot))
				{
					if (!ExpressionHelper.IsNestedWhereClause(expression.Arguments[0], this.resourceRoot) || !ExpressionHelper.IsPropertyComparisonPredicate(expression.Arguments[1]))
					{
						this.cmdletExpression = expression;
						this.category = ExpressionCategory.WhereOfResultSet;
						this.navigationProperty = null;
					}
					else
					{
						this.cmdletExpression = expression;
						if (this.navigationProperty.IsNavPropertyHasGetReferenceCmdlet(this.entityMetadata))
						{
							this.category = ExpressionCategory.NestedPropertyComparisonsInsideNavPropertyWithGetRefCmdlet;
						}
						else
						{
							this.category = ExpressionCategory.NestedPropertyComparisons;
						}
						return expression;
					}
				}
				else
				{
					this.cmdletExpression = expression;
					if (this.navigationProperty.IsNavPropertyHasGetReferenceCmdlet(this.entityMetadata))
					{
						this.category = ExpressionCategory.WhereInsideNavPropertyWithGetRefCmdlet;
					}
					else
					{
						this.category = ExpressionCategory.WhereOfResourceRoot;
					}
					return expression;
				}
			}
			this.Visit(expression.Arguments[0]);
			return expression;
		}
예제 #10
0
 protected override Expression VisitMethodCall(MethodCallExpression expression)
 {
     if (expression.Method.Name != "Where")
     {
         if (expression.Method.Name != "Select")
         {
             if (expression.Method.Name != "SelectMany")
             {
                 this.navigationProperty = null;
             }
             else
             {
                 this.cmdletExpression   = expression;
                 this.category           = ExpressionCategory.SelectNavProperty;
                 this.navigationProperty = ExpressionHelper.GetResourcePropertyFromSequence(expression.Arguments[1]);
             }
         }
         else
         {
             this.cmdletExpression   = expression;
             this.category           = ExpressionCategory.SelectExpansion;
             this.navigationProperty = null;
         }
     }
     else
     {
         if (!ExpressionHelper.IsResourceRoot(expression.Arguments[0], this.resourceRoot))
         {
             if (!ExpressionHelper.IsNestedWhereClause(expression.Arguments[0], this.resourceRoot) || !ExpressionHelper.IsPropertyComparisonPredicate(expression.Arguments[1]))
             {
                 this.cmdletExpression   = expression;
                 this.category           = ExpressionCategory.WhereOfResultSet;
                 this.navigationProperty = null;
             }
             else
             {
                 this.cmdletExpression = expression;
                 if (this.navigationProperty.IsNavPropertyHasGetReferenceCmdlet(this.entityMetadata))
                 {
                     this.category = ExpressionCategory.NestedPropertyComparisonsInsideNavPropertyWithGetRefCmdlet;
                 }
                 else
                 {
                     this.category = ExpressionCategory.NestedPropertyComparisons;
                 }
                 return(expression);
             }
         }
         else
         {
             this.cmdletExpression = expression;
             if (this.navigationProperty.IsNavPropertyHasGetReferenceCmdlet(this.entityMetadata))
             {
                 this.category = ExpressionCategory.WhereInsideNavPropertyWithGetRefCmdlet;
             }
             else
             {
                 this.category = ExpressionCategory.WhereOfResourceRoot;
             }
             return(expression);
         }
     }
     this.Visit(expression.Arguments[0]);
     return(expression);
 }