public IActionResult Index(ChildrenFilterViewModel filterModel, int page)
        {
            ChildrenFilterViewModel filter = HttpContext.Session.Get <ChildrenFilterViewModel>(filterKey);

            if (filter != null)
            {
                filter.FullName    = filterModel.FullName;
                filter.Group       = filterModel.Group;
                filter.GroupType   = filterModel.GroupType;
                filter.Age         = filterModel.Age;
                filter.OtherGroups = filterModel.OtherGroups;

                HttpContext.Session.Remove(filterKey);
                HttpContext.Session.Set(filterKey, filter);
            }

            return(RedirectToAction("Index", new { page }));
        }
        // GET: Children
        public async Task <IActionResult> Index(SortState sortState, int page = 1)
        {
            ChildrenFilterViewModel filter = HttpContext.Session.Get <ChildrenFilterViewModel>(filterKey);

            if (filter == null)
            {
                filter = new ChildrenFilterViewModel
                {
                    FullName    = string.Empty,
                    Group       = string.Empty,
                    GroupType   = string.Empty,
                    Age         = null,
                    OtherGroups = string.Empty
                };
                HttpContext.Session.Set(filterKey, filter);
            }

            string key = $"{typeof(Child).Name}-{page}-{sortState}-{filter.FullName}-{filter.Group}-{filter.GroupType}-{filter.Age}-{filter.OtherGroups}";

            if (!_cache.TryGetValue(key, out ChildrenViewModel model))
            {
                model = new ChildrenViewModel();

                IQueryable <Child> children = GetSortedChildren(sortState, filter.FullName, filter.Group, filter.GroupType, filter.Age, filter.OtherGroups);

                int count = children.Count();

                model.PageViewModel = new PageViewModel(page, count, pageSize);

                model.Childs                  = count == 0 ? new List <Child>() : children.Skip((model.PageViewModel.PageIndex - 1) * pageSize).Take(pageSize).ToList();
                model.SortViewModel           = new SortViewModel(sortState);
                model.ChildrenFilterViewModel = filter;

                _cache.Set(key, model);
            }

            return(View(model));
        }