/// <summary> /// Visit Query options for Resource /// </summary> /// <param name="re">Resource Expression with query options</param> internal void VisitQueryOptions(ResourceExpression re) { if (re.HasQueryOptions) { this.uriBuilder.Append(UriHelper.QUESTIONMARK); QueryableResourceExpression rse = re as QueryableResourceExpression; if (rse != null) { IEnumerator options = rse.SequenceQueryOptions.GetEnumerator(); while (options.MoveNext()) { Expression e = ((Expression)options.Current); ResourceExpressionType et = (ResourceExpressionType)e.NodeType; switch (et) { case ResourceExpressionType.SkipQueryOption: this.VisitQueryOptionExpression((SkipQueryOptionExpression)e); break; case ResourceExpressionType.TakeQueryOption: this.VisitQueryOptionExpression((TakeQueryOptionExpression)e); break; case ResourceExpressionType.OrderByQueryOption: this.VisitQueryOptionExpression((OrderByQueryOptionExpression)e); break; case ResourceExpressionType.FilterQueryOption: this.VisitQueryOptionExpression((FilterQueryOptionExpression)e); break; default: Debug.Assert(false, "Unexpected expression type " + (int)et); break; } } } if (re.ExpandPaths.Count > 0) { this.VisitExpandOptions(re.ExpandPaths); } if (re.Projection != null && re.Projection.Paths.Count > 0) { this.VisitProjectionPaths(re.Projection.Paths); } if (re.CountOption == CountOption.CountQuery) { this.VisitCountQueryOptions(); } if (re.CustomQueryOptions.Count > 0) { this.VisitCustomQueryOptions(re.CustomQueryOptions); } this.AppendCachedQueryOptionsToUriBuilder(); } }
internal void VisitQueryOptions(ResourceExpression re) { if (re.HasQueryOptions) { ResourceSetExpression rse = re as ResourceSetExpression; if (rse != null) { IEnumerator options = rse.SequenceQueryOptions.GetEnumerator(); while (options.MoveNext()) { Expression e = (Expression)options.Current; ResourceExpressionType et = (ResourceExpressionType)e.NodeType; switch (et) { case ResourceExpressionType.RequestOptions: this.VisitQueryOptionExpression((RequestOptionsQueryOptionExpression)e); break; case ResourceExpressionType.OperationContext: this.VisitQueryOptionExpression((OperationContextQueryOptionExpression)e); break; case ResourceExpressionType.Resolver: this.VisitQueryOptionExpression((EntityResolverQueryOptionExpression)e); break; case ResourceExpressionType.TakeQueryOption: this.VisitQueryOptionExpression((TakeQueryOptionExpression)e); break; case ResourceExpressionType.FilterQueryOption: this.VisitQueryOptionExpression((FilterQueryOptionExpression)e); break; default: Debug.Assert(false, "Unexpected expression type " + (int)et); break; } } } if (re.Projection != null && re.Projection.Paths.Count > 0) { this.Projection = re.Projection; this.SelectColumns = re.Projection.Paths; } if (re.CustomQueryOptions.Count > 0) { this.VisitCustomQueryOptions(re.CustomQueryOptions); } } }