public ActionResult Index(string filter) { var sortTypesList = new List <string>(); foreach (var item in typeof(Game).GetProperties()) { var instance = new Game(); if (item.PropertyType.GetMethods().ToList().Exists(x => x.Name == "CompareTo")) { sortTypesList.Add(item.Name.ToLower() + "-" + gameSorter.DESC); sortTypesList.Add(item.Name.ToLower() + "-" + gameSorter.ASC); } } ViewBag.SortTypes = sortTypesList; ViewBag.Archive = mapper.Map <ICollection <ArchiveGameViewModel> >(gameService.GetArchiveGames()); var games = gameService.GetAllGames(); if (filter != null && !filter.Equals("")) { ViewBag.Filter = true; dynamic filters = System.Web.Helpers.Json.Decode(filter); var genres = ((object[])filters.genres)?.Select(x => x.ToString()).ToList(); var developers = ((object[])filters.developers)?.Select(x => x.ToString()).ToList(); var sortKeyWord = ((object)filters.sortKeyWord)?.ToString(); games = games.Where(x => (developers.Count > 0 ? developers.Contains(x.Developer.Name) : true) && (genres.Count > 0 ? genres.Contains(x.Genre.Name) : true)).ToList(); if (sortKeyWord != null && !sortKeyWord.Equals("")) { (games as List <Game>).Sort(gameSorter.GetComparison(sortKeyWord)); } } var model = mapper.Map <ICollection <GameViewModel> >(games); return(View(model)); }