public async Task <IActionResult> FilterActivities([FromBody] ActivitySearchFilterModel filterModel)
        {
            int pageSize           = _configuration.GetValue <int>("IndexPageSize");
            var activities         = _dbContext.Activities.AsNoTracking().OrderBy(a => a.Date);
            var filteredActivities = FilterHelper.GetActivities(activities, filterModel);
            var pagedActivities    = await PaginatedList <Activity> .CreatePagedResultAsync(filteredActivities, filterModel.PageNumber, pageSize);

            var modelItems = _mapper.Map <PaginatedList <Activity>, PaginatedList <ActivityIndexViewModel> >(pagedActivities);

            return(PartialView("_ActivityList", modelItems));
        }
        public static IQueryable <Activity> GetActivities(IQueryable <Activity> activities, ActivitySearchFilterModel filter)
        {
            if (filter == null)
            {
                return(activities);
            }

            var result = activities;

            if (!string.IsNullOrEmpty(filter.City))
            {
                result = result.Where(a => a.City == filter.City);
            }

            if (filter.SelectedCategories != null && filter.SelectedCategories.Length > 0)
            {
                List <ActivityType> activityFilters = new List <ActivityType>();
                //Parse string categories to enum
                foreach (string c in filter.SelectedCategories)
                {
                    activityFilters.Add((ActivityType)Enum.Parse(typeof(ActivityType), c));
                }
                result = result.Where(a => activityFilters.Contains(a.Type));
            }
            return(result);
        }