private IQueryable GetQuery() { ODataPath path = this.GetPath(); RestierQueryBuilder builder = new RestierQueryBuilder(this.Api, path); IQueryable queryable = builder.BuildQuery(); this.shouldReturnCount = builder.IsCountPathSegmentPresent; this.shouldWriteRawValue = builder.IsValuePathSegmentPresent; if (queryable == null) { throw new HttpResponseException( this.Request.CreateErrorResponse( HttpStatusCode.NotFound, Resources.ResourceNotFound)); } if (this.shouldReturnCount || this.shouldWriteRawValue) { // Query options don't apply to $count or $value. return queryable; } ODataQueryContext queryContext = new ODataQueryContext(this.Request.ODataProperties().Model, queryable.ElementType, path); ODataQueryOptions queryOptions = new ODataQueryOptions(queryContext, this.Request); // TODO GitHubIssue#41 : Ensure stable ordering for query ODataQuerySettings settings = new ODataQuerySettings() { HandleNullPropagation = HandleNullPropagationOption.False, EnsureStableOrdering = true, EnableConstantParameterization = false, PageSize = null, // no support for server enforced PageSize, yet }; queryable = queryOptions.ApplyTo(queryable, settings); return queryable; }
private IQueryable GetQuery() { ODataPath path = this.GetPath(); RestierQueryBuilder builder = new RestierQueryBuilder(this.Api, path); IQueryable queryable = builder.BuildQuery(); this.shouldReturnCount = builder.IsCountPathSegmentPresent; this.shouldWriteRawValue = builder.IsValuePathSegmentPresent; if (queryable == null) { throw new HttpResponseException( this.Request.CreateErrorResponse( HttpStatusCode.NotFound, Resources.ResourceNotFound)); } if (this.shouldReturnCount || this.shouldWriteRawValue) { // Query options don't apply to $count or $value. return queryable; } ODataQueryContext queryContext = new ODataQueryContext(this.Request.ODataProperties().Model, queryable.ElementType, path); ODataQueryOptions queryOptions = new ODataQueryOptions(queryContext, this.Request); if (queryOptions.Count != null) { this.includeTotalCount = queryOptions.Count.Value; } // TODO GitHubIssue#41 : Ensure stable ordering for query ODataQuerySettings settings = new ODataQuerySettings { HandleNullPropagation = HandleNullPropagationOption.False, PageSize = null, // no support for server enforced PageSize, yet }; // Entity count can NOT be evaluated at this point of time because the source // expression is just a placeholder to be replaced by the expression sourcer. queryable = queryOptions.ApplyTo(queryable, settings, AllowedQueryOptions.Count); return queryable; }