public IEnumerable <Drink> SearchByIngredients(SortedSet <string> ingredientsToSearch, SearchDrinkOption searchOption) { var drinksFound = new List <Drink>(); var ingredientsFound = new SortedSet <string>(); var drinks = _repository.GetAllDrinksAsQueryable().Include(drink => drink.Ingredients); switch (searchOption) { case SearchDrinkOption.All: { foreach (var drink in drinks) { foreach (var drinkIngredient in drink.Ingredients) { if (drinkIngredient.Name == null) { continue; } foreach (var ingredient in ingredientsToSearch) { if (drinkIngredient.Name.Contains(ingredient, StringComparison.InvariantCultureIgnoreCase)) { ingredientsFound.Add(ingredient); } } } if (ingredientsFound.SetEquals(ingredientsToSearch)) { drinksFound.Add(drink); } ingredientsFound.Clear(); } break; } case SearchDrinkOption.Any: { foreach (var drink in drinks) { var nextDrink = false; foreach (var drinkIngredient in drink.Ingredients) { if (drinkIngredient.Name == null) { continue; } foreach (var ingredient in ingredientsToSearch) { if (drinkIngredient.Name.Contains(ingredient, StringComparison.InvariantCultureIgnoreCase)) { drinksFound.Add(drink); nextDrink = true; break; } } if (nextDrink) { break; } } } break; } } return(drinksFound); }