private string CreateMoviePageURI(MovieResourceParameters parameters, PageState pageState) { urlHelper.Request = ActionContext.Request; switch (pageState) { case PageState.PreviousPage: return(urlHelper.Link("GetMoviesInPage", new { PageNumber = parameters.PageNumber - 1, PageSize = parameters.PageSize })); case PageState.NextPage: return(urlHelper.Link("GetMoviesInPage", new { PageNumber = parameters.PageNumber + 1, PageSize = parameters.PageSize })); case PageState.CurrentPage: return(urlHelper.Link("GetMoviesInPage", new { PageNumber = parameters.PageNumber, PageSize = parameters.PageSize })); default: return(null); } }
public IHttpActionResult GetMovies([FromUri] MovieResourceParameters parameters) { if (parameters == null) { parameters = new MovieResourceParameters(); } var page = UOW.Movies.GetMovieInPage(parameters); var currentLink = CreateMoviePageURI(parameters, PageState.CurrentPage); var previousLink = page.HasPrevious ? CreateMoviePageURI(parameters, PageState.PreviousPage) : null; var nextLink = page.HasNext ? CreateMoviePageURI(parameters, PageState.NextPage) : null; var locationHeader = new { totalCount = page.TotalCount, currntPageNumber = page.CurrentPage, pageSize = page.PageSize, countInPage = page.PageCount, currentPageLink = currentLink, previousPageLink = previousLink, nextPageLink = nextLink, }; //var movies = UOW.Movies.GetAll(); var movieDTos = Mapper.MoviesDtosFromMovies(page); ActionContext.Response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent(typeof(IEnumerable <GetMovieDTO>), movieDTos, ActionContext.ActionDescriptor.Configuration.Formatters.JsonFormatter) }; ActionContext.Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(locationHeader)); return(ResponseMessage(ActionContext.Response)); }
public PageList <Movie> GetMovieInPage(MovieResourceParameters movieResource) { var orderedExtendedQuery = Entities .OrderBy(m => m.Name) .ThenBy(m => m.Rate).AsQueryable(); if (!string.IsNullOrWhiteSpace(movieResource.Genre)) { var genre = movieResource.Genre.ToLower(); orderedExtendedQuery = orderedExtendedQuery.Where(m => m.Genre.ToLower() == genre); } if (!string.IsNullOrWhiteSpace(movieResource.rateop)) { var rateopArray = movieResource.rateop.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); var opearion = rateopArray[0]; int.TryParse(rateopArray[1], out int rate); if (rate > 0) { switch (opearion) { case ">": orderedExtendedQuery = orderedExtendedQuery .Where(m => m.Rate > rate); break; case "<": orderedExtendedQuery = orderedExtendedQuery .Where(m => m.Rate < rate); break; case ">=": orderedExtendedQuery = orderedExtendedQuery .Where(m => m.Rate >= rate); break; case "<=": orderedExtendedQuery = orderedExtendedQuery .Where(m => m.Rate <= rate); break; case "=": orderedExtendedQuery = orderedExtendedQuery .Where(m => m.Rate == rate); break; } } } if (movieResource.Rate > 0) { orderedExtendedQuery = orderedExtendedQuery.Where(m => m.Rate == movieResource.Rate); } var page = orderedExtendedQuery .Skip(movieResource.PageNumber * movieResource.PageSize - (movieResource.PageSize)) .Take(movieResource.PageSize) .ToList(); return(new PageList <Movie>(page, Entities.Count(), movieResource.PageNumber, movieResource.PageSize)); }