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); }