Пример #1
0
        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));
            }
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }