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