private string CreateCountryUri(CountryResourceParamenters pageination, PaginationResourceUriType uriType) { switch (uriType) { case PaginationResourceUriType.PreviousPage: var previousParamenters = pageination.Clone(); previousParamenters.PageIndex--; return(_urlHelper.Link("GetCountries", previousParamenters)); case PaginationResourceUriType.NextPage: var nextParamenters = pageination.Clone(); nextParamenters.PageIndex++; return(_urlHelper.Link("GetCountries", nextParamenters)); default: return(_urlHelper.Link("GetCountries", pageination)); } }
public async Task <IActionResult> Get(CountryResourceParamenters paramenters) { var countries = await _countryRepository.GetCountriesAsync(paramenters); var countryResources = _mapper.Map <List <CountryResource> >(countries); var previousLink = countries.HasPrevious ? CreateCountryUri(paramenters, PaginationResourceUriType.PreviousPage) : null; var nextLink = countries.HasNext ? CreateCountryUri(paramenters, PaginationResourceUriType.NextPage) : null; var meta = new { countries.TotalItemsCount, countries.PageinationBase.PageSize, countries.PageinationBase.PageIndex, countries.PageCount, previousLink, nextLink }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(meta)); return(Ok(countryResources)); }
public async Task <PaginatedList <Country> > GetCountriesAsync(CountryResourceParamenters paramenters) { var query = _myDbContext.Countries.AsQueryable(); if (!string.IsNullOrEmpty(paramenters.EnglishName)) { var englishNameClause = paramenters.EnglishName.Trim().ToLowerInvariant(); query = query.Where(x => x.EnglishName.ToLowerInvariant() == englishNameClause); } if (!string.IsNullOrEmpty(paramenters.ChineseName)) { var chineseNameClause = paramenters.ChineseName.Trim().ToLowerInvariant(); query = query.Where(x => x.ChineseName.ToLowerInvariant() == chineseNameClause); } var propertiesMap = new Dictionary <string, Expression <Func <Country, object> > > { { "id", c => c.Id }, { "EnglishName", c => c.EnglishName }, { "ChineseName", c => c.ChineseName }, { "Abbreviation", c => c.Abbreviation } }; if (!string.IsNullOrEmpty(paramenters.OrderBy)) { var isDescending = paramenters.OrderBy.EndsWith(" desc"); //var property = isDescending ? paramenters.OrderBy.Split(" ")[0] : paramenters.OrderBy; //query = query.OrderBy(property + (isDescending ? "descending" : " ascending")); } //if (!string.IsNullOrEmpty(paramenters.OrderBy)) //{ // if(paramenters.OrderBy.EndsWith(" desc")) // { // var property = paramenters.OrderBy.Split(" ")[0]; // switch (property) // { // case "Id": // query = query.OrderByDescending(x => x.Id); // break; // case "EnglishName": // query = query.OrderByDescending(x => x.EnglishName); // break; // case "ChineseName": // query = query.OrderByDescending(x => x.ChineseName); // break; // case "Abbreviation": // query = query.OrderByDescending(x => x.Abbreviation); // break; // } // } // else // { // var property = paramenters.OrderBy; // switch (property) // { // case "Id": // query = query.OrderBy(x => x.Id); // break; // case "EnglishName": // query = query.OrderBy(x => x.EnglishName); // break; // case "ChineseName": // query = query.OrderBy(x => x.ChineseName); // break; // case "Abbreviation": // query = query.OrderBy(x => x.Abbreviation); // break; // } // } //} query = query.OrderBy(x => x.Id); var count = await query.CountAsync(); var items = await query.Skip(paramenters.PageSize *paramenters.PageIndex) .Take(paramenters.PageSize).ToListAsync(); return(new PaginatedList <Country>(paramenters.PageIndex, paramenters.PageSize, count, items)); }