public ActionResult Recettes(RecipesViewModels submitted) { model = DisplaySearchResult(submitted); var IngInList = db.Ingredients.ToList(); List <SelectListItem> items = new List <SelectListItem>(); foreach (var Ing in IngInList) { var item = new SelectListItem { Value = Ing.id.ToString(), Text = Ing.name }; items.Add(item); } MultiSelectList IngList = new MultiSelectList(items.OrderBy(i => i.Text), "Value", "Text"); model.SelectIng = IngList; EditionLastAndNewRecipes.MeilleuresRecettes(model.NewAndBest.lastRecipes); EditionLastAndNewRecipes.DernieresRecettes(model.NewAndBest.bestRecipes); return(View(model)); }
public RecipesViewModels DisplaySearchResult(RecipesViewModels submitted, int limit = 4) { List <Recettes> RecipesByIng = new List <Recettes>(); submitted.Result = new List <Recettes>(); if (submitted.IngIDs != null || submitted.Name != null || (submitted.CalorieMin >= 0 && submitted.CalorieMax != 0)) { if (submitted.IngIDs != null) { //ajoute a la liste les recettes contenants les ingrédients sélectionnés foreach (var item in submitted.IngIDs) { RecipesByIng.AddRange(db.Recettes.Where(n => n.Ingredients.Any(m => m.id.Contains(item)))); } if (submitted.IngIDs.Count() > 1) { // cette requête permet de repérer les Id de recettes dupliqués ( donc l'id des recettes correspondant à notre recherche) var duplicatedID = from r in RecipesByIng group r by r.id into g where g.Count() > 1 select g.Key; //requête nous renvoyant la liste des recettes en doublons var duplicated = RecipesByIng.FindAll(p => duplicatedID.Contains(p.id)); //supression des doublons dans la listes submitted.Result = duplicated.Distinct(new DistinctItemComparer()).ToList(); } else { submitted.Result = RecipesByIng; } } //Recherche par nom de recette if (submitted.Name != String.Empty) { if (submitted.Result == null) { submitted.Result.RemoveAll(m => !m.name.ToLower().Contains(submitted.Name.ToLower())); } else { submitted.Result.AddRange(db.Recettes.Where(m => m.name.ToLower().Contains(submitted.Name.ToLower())).ToList()); } } //Recherche par Calorie if (submitted.CalorieMin >= 0 && submitted.CalorieMax != 0) { if (submitted.CalorieMin < submitted.CalorieMax) { if (submitted.Result == null) { submitted.Result.RemoveAll(m => m.calories >= submitted.CalorieMax); submitted.Result.RemoveAll(m => m.calories <= submitted.CalorieMin); } else { submitted.Result.AddRange(db.Recettes.Where(m => m.calories <= submitted.CalorieMax).ToList()); submitted.Result.RemoveAll(m => m.calories <= submitted.CalorieMin); } } else { submitted.Result = null; } } } else { submitted.Result = db.Recettes.OrderBy(n => n.name).ToList(); } return(submitted); }