public IActionResult Index([Bind("SearchName")] FilteringDTO filtering, SortingDTO sorting, PagingDTO paging)
        {
            ViewBag.CurrentPage  = paging.PageNumber;
            ViewBag.OrderBy      = sorting.OrderBy == "DESC" ? "ASC" : "DESC";
            ViewBag.CurrentOrder = sorting.OrderBy;
            ViewBag.CurrentSort  = sorting.SortBy;
            paging.CountItems    = ModelService.CountModels();
            paging.PageSize      = 5;
            if (paging.PageNumber < 1)
            {
                paging.PageNumber = 1;
            }
            if (paging.HasNextPage)
            {
                ViewBag.HasNext = true;
            }
            else
            {
                ViewBag.HasNext = false;
            }
            if (paging.HasPreviousPage)
            {
                ViewBag.HasPrevious = true;
            }
            else
            {
                ViewBag.HasPrevious = false;
            }
            var filter = Mapper.Map <Filtering>(filtering);
            var sort   = Mapper.Map <Sorting>(sorting);
            var page   = Mapper.Map <Paging>(paging);
            var model  = ModelService.GetVehicleModels(filter, sort, page);

            if (model == null)
            {
                return(NotFound(filtering.SearchName + " not Found"));
            }
            return(View(model.Select(Mapper.Map <VehicleModel, VehicleModelDTO>)));
        }
        public IActionResult Index([Bind("SearchName")] Filtering makeFiltering, Sorting sorting, Paging paging)
        {
            if (paging.PageNumber == 1)
            {
                ViewBag.OrderBy = sorting.OrderBy == "DESC" ? "ASC" : "DESC";
                CurrentOrder    = sorting.OrderBy;
                CurrentSort     = sorting.SortBy;
            }

            if (String.IsNullOrEmpty(sorting.SortBy))
            {
                sorting.SortBy  = "Name";
                sorting.OrderBy = "ASC";
            }

            paging.TotalPages = ModelService.CountModels();

            CurrentPage = paging.PageNumber;
            ElementsGot = paging.Elements;

            #region HasNextButton
            if ((ElementsGot + NumberOfElements) < paging.TotalPages)
            {
                ViewBag.HasNext = true;
            }
            else
            {
                ViewBag.HasNext = false;
            }
            #endregion
            #region HasPrevButton
            if (paging.HasPreviousPage)
            {
                ViewBag.HasPrevious = true;
            }
            else
            {
                ViewBag.HasPrevious = false;
            }
            #endregion
            #region Search
            if (!String.IsNullOrEmpty(makeFiltering.SearchName))
            {
                if (!ModelService.HasNameInDatabase(makeFiltering.SearchName))
                {
                    return(NotFound(makeFiltering.SearchName + " not Found"));
                }
                string countQuery = String.Format("SELECT * FROM dbo.VehicleModels Where Name = '{0}'", makeFiltering.SearchName);
                paging.TotalPages = ModelService.GetVehicleModels(countQuery).Count();
                ElementsGot       = 0;
                string searchQuery = String.Format("SELECT * FROM dbo.VehicleModels Where Name = '{0}' ORDER BY {1} {2} OFFSET {3} ROWS FETCH NEXT {4} ROWS ONLY", makeFiltering.SearchName, sorting.SortBy, sorting.OrderBy, ElementsGot, NumberOfElements);
                var    searchMake  = ModelService.GetVehicleModels(searchQuery).Select(Mapper.Map <VehicleModelDTO>);
                #region HasNextButton
                if ((ElementsGot + NumberOfElements) < paging.TotalPages)
                {
                    ViewBag.HasNext = true;
                }
                else
                {
                    ViewBag.HasNext = false;
                }
                #endregion
                #region HasPrevButton
                if (paging.HasPreviousPage)
                {
                    ViewBag.HasPrevious = true;
                }
                else
                {
                    ViewBag.HasPrevious = false;
                }
                #endregion
                return(View(searchMake));
            }
            #endregion
            string query = String.Format("SELECT * FROM dbo.VehicleModels ORDER BY {0} {1} OFFSET {2} ROWS FETCH NEXT {3} ROWS ONLY", sorting.SortBy, sorting.OrderBy, ElementsGot, NumberOfElements);
            var    make  = ModelService.GetVehicleModels(query).Select(Mapper.Map <VehicleModel, VehicleModelDTO>);
            return(View(make));
        }