private static IEnumerable <PlantAdviseModel> RecommendPlantsWithUserSimilarityIndexes( IEnumerable <PlantModel> availablePlantList, int userId) { var userPlantRatingList = ReadUserPlantRatingCsv(); var userSimilarityIndexList = CalculateUserSimilarityIndex(userId, userPlantRatingList); var plantAdviseList = new List <PlantAdviseModel>(); foreach (var plant in availablePlantList) // Voor elke plant een rating bepalen { var likeIndexes = CountLikeIndexesForPlant(userPlantRatingList, userSimilarityIndexList, plant); var dislikeIndexes = CountDislikeIndexesForPlant(userPlantRatingList, userSimilarityIndexList, plant); var ratesCount = CountTimesPlantIsRated(userPlantRatingList, plant); var plantIndex = (likeIndexes - dislikeIndexes) / ratesCount; var newPlantAdvise = new PlantAdviseModel { Plant = plant, Rating = plantIndex }; plantAdviseList.Add(newPlantAdvise); } plantAdviseList = plantAdviseList.OrderByDescending(p => p.Rating).ToList(); return(plantAdviseList); }
private static IEnumerable <PlantAdviseModel> RecommendPlantsBasedOnGardenLocation( IReadOnlyCollection <PlantModel> plantList, LocationModel gardenLocation) { var cityName = gardenLocation.CityName; var cityPlantList = ReadCityPlantDataCsv(); cityPlantList = cityPlantList.Where(c => c.CityName.ToLower().Equals(cityName.ToLower())); var orderedPlantList = new List <PlantAdviseModel>(); // This loop adds plants that aren't being grown in city. foreach (var plant in plantList) { var isPlantInCity = cityPlantList.Any(cityPlantModel => cityPlantModel.PlantName.ToLower().Equals(plant.Name.ToLower())); if (isPlantInCity) { continue; } var plantAdvise = new PlantAdviseModel { Rating = 0, CityName = cityName, Plant = plant }; orderedPlantList.Add(plantAdvise); } // This loops adds plants that are being grown in the city (in order from least to most). foreach (var cityPlantModel in cityPlantList) { foreach (var plant in plantList) { if (!plant.Name.Equals(cityPlantModel.PlantName)) { continue; } var adviceRating = DetermineCityPlantAdviceRating(cityPlantModel); var plantAdvise = new PlantAdviseModel { Rating = adviceRating, CityName = cityName, Plant = plant }; orderedPlantList.Add(plantAdvise); break; } } return(orderedPlantList.OrderByDescending(p => p.Rating)); }