private async Task <AchievementListVM> GetElementsAsync(int?page, int?categoryId, string keyword)
        {
            var vm = new AchievementListVM()
            {
                CategoryId = categoryId,
                Keyword    = keyword,
                PageIndex  = page ?? 1,
                PageSize   = 10
            };
            var query = _db.Achievements.Include(d => d.AchievementCategory).AsQueryable();

            if (categoryId > 0)
            {
                query = query.Where(d => d.CategoryId == categoryId);
            }
            if (!string.IsNullOrEmpty(keyword))
            {
                query = query.Where(d => d.Title.Contains(keyword));
            }

            var pagelist = await query.OrderByDescending(d => d.Id).Skip((vm.PageIndex - 1) * vm.PageSize).Take(vm.PageSize).ProjectTo <AchievementVM>().ToListAsync();


            vm.TotalCount = await query.CountAsync();

            vm.Achievements = new StaticPagedList <AchievementVM>(pagelist, vm.PageIndex, vm.PageSize, vm.TotalCount);
            return(vm);
        }
        // GET: Admin/Achievements

        public async Task <ActionResult> Index(int?page, int?categoryId, string keyword)
        {
            AchievementListVM vm = await GetElementsAsync(page, categoryId, keyword);

            ViewBag.PageSizes = new SelectList(Site.PageSizes());

            var categoryList = await _db.AchievementCategories.OrderByDescending(c => c.Importance).ToListAsync();

            ViewBag.Categories = new SelectList(categoryList, "Id", "Title");

            return(View(vm));
        }