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