public IEnumerable <CardScore> SearchNew(SearchViewModel model)
        {
            model.GetScenario = () => {
                return(!string.IsNullOrEmpty(model.Scenario) ?
                       scenarioService.GetScenario(model.Scenario.ToUrlSafeString())
                : null);
            };

            model.Initialize();

            var results = new Dictionary <string, CardScore>();
            var filters = model.Filters();

            if (filters.Count() == 0)
            {
                filters.Add(new SearchFilter((m, c) => { return(c.CardSet != null && c.CardSet.Name == "Core Set" && c.CardType == CardType.Hero); }, 100f, 0f, "Default Search: Core Set Heroes", false));
            }

            foreach (var card in cards)
            {
                foreach (var filter in filters)
                {
                    var score = filter.Score(model, card);

                    if (results.ContainsKey(card.Slug))
                    {
                        results[card.Slug].AddDescription(filter.Description(model, card));
                        results[card.Slug].AddScore(score);

                        /*
                         * var existing = results[card.Slug].Score;
                         * if (score == 0 || existing > 0 && score > existing)
                         * {
                         *  results[card.Slug].Score = score;
                         * }
                         */
                    }
                    else
                    {
                        results[card.Slug] = new CardScore(card, score, filter.Description(model, card));
                    }
                }
            }

            if (model.IsRandom())
            {
                var total = results.Count();
                if (total > 1)
                {
                    var random = new Random();
                    var choice = random.Next(0, total - 1);
                    var score  = results.Values.ToList()[choice];
                    results = new Dictionary <string, CardScore>();
                    results[score.Card.Slug] = score;
                }
            }

            var sortedResults = sortService.Sort(model, filters, results);

            if (model.IsAdvancedSearch())
            {
                sortedResults = advancedSearchService.Search(model, sortedResults);
            }

            return(sortedResults);
        }