public async Task <List <VMActivityDetails> > GetActivity(int region_id = 0) { var response = new List <VMActivityDetails>(); try { List <Activities> activities = new List <Activities>(); if (region_id > 0) { var activityRegionMap = await dbContext.ActivityRegionMapping.Where(x => x.region_id == region_id).ToListAsync(); activities = dbContext.Activities.Join(activityRegionMap, x => x.activity_id, y => y.activity_id, (x, y) => x).ToList(); } else { activities = dbContext.Activities.Select(x => x).ToList(); } var booked_activities = dbContext.Bookings.Select(x => x).ToList(); var activitiesBooked = booked_activities.Join(activities, x => x.activity_id, y => y.activity_id, (x, y) => new { activities = y, booking = x }).ToList(); var seasonalActivity = activitiesBooked.Select(x => new SeasonalActivity { activities = x.activities, booking_id = x.booking.booking_id, season = GetSeason(x.booking.booking_date) }).ToList(); var currentSeason = GetSeason(DateTime.Now); seasonalActivity = seasonalActivity.Where(x => x.season == currentSeason).ToList(); var seasonalActivitiesgrouped = (from a in seasonalActivity group a by new { activityID = a.activities.activity_id, season = a.season } into x select new { activityId = x.Key.activityID, activityCount = x.Count(), activitySeason = x.Key.season }).AsEnumerable(); // var activitySeason = seasonalActivitiesgrouped.Join(seasonalActivity, x => x.activityId, y => y.activities.activity_id, (x, y) => new { y.activities.activity_name, y.activities.activity_id, y.season, x.activityCount }).ToList(); var topSeasonalActivity = seasonalActivitiesgrouped.OrderByDescending(x => x.activityCount).Take(3).ToList(); List <VMActivityDetails> aresult = new List <VMActivityDetails>(); foreach (var item in topSeasonalActivity) { VMActivityDetails activityItem = new VMActivityDetails(); activityItem.activity_id = item.activityId; activityItem.activity_name = activities.Where(x => x.activity_id == item.activityId).FirstOrDefault().activity_name; //activityItem.ActivityAvgRating = item.avgrating; //activityItem.ActivityFee = item.activity_fee; activityItem.activity_season = item.activitySeason; aresult.Add(activityItem); } response = aresult; } catch (Exception ex) { throw ex; } return(response); }
public async Task <List <VMActivityDetails> > GetActivity(int region_id = 0) { var response = new List <VMActivityDetails>(); try { List <Activities> activities_result = new List <Activities>(); if (region_id > 0) { var activityRegionMap = await dbcontext.ActivityRegionMapping.Where(x => x.region_id == region_id).ToListAsync(); activities_result = dbcontext.Activities.Join(activityRegionMap, x => x.activity_id, y => y.activity_id, (x, y) => x).ToList(); } else { activities_result = dbcontext.Activities.Select(x => x).ToList(); } var ratings_result = dbcontext.ActivityRatings.Select(x => x); #region Most recommended activties // List of all activities var activityRatingList = activities_result.Join(ratings_result, x => x.activity_id, y => y.activity_id, (x, y) => new { x.activity_id, x.activity_name, x.activity_fee, y.activity_rating }); // groupactivities basis ratings var groupedactivities = activityRatingList.Select(x => new { x.activity_id, x.activity_name, x.activity_fee, avgrating = activityRatingList.Where(y => y.activity_id == x.activity_id).Average(y => y.activity_rating) });//).GroupBy(y => y.activity_id); // obtain top three/five results var recommActivityResult = groupedactivities.Distinct().OrderByDescending(x => x.avgrating).Take(3); //var otherActivities = groupedactivities.Except(topActivities); //var recommActivityResult = topActivities.Join(groupedactivities, x => x.activity_id, y => y.activity_id, (x, y) => new { x.activity_id, x.avgrating, y.activity_name, y.activity_fee }).ToList(); List <VMActivityDetails> result = new List <VMActivityDetails>(); foreach (var item in recommActivityResult) { VMActivityDetails activityItem = new VMActivityDetails(); activityItem.activity_id = item.activity_id; activityItem.activity_name = item.activity_name; //activityItem.ActivityAvgRating = item.avgrating; //activityItem.ActivityFee = item.activity_fee; result.Add(activityItem); } response = result; } catch (Exception ex) { throw ex; } return(response); // keep others on stand by (should pop up on click of see more in respective order) #endregion }
public async Task <List <VMActivityDetails> > GetActivity(int region_id = 0) { var response = new List <VMActivityDetails>(); try { List <Activities> activities_result = new List <Activities>(); if (region_id > 0) { var activityRegionMap = await dbContext.ActivityRegionMapping.Where(x => x.region_id == region_id).ToListAsync(); activities_result = dbContext.Activities.Join(activityRegionMap, x => x.activity_id, y => y.activity_id, (x, y) => x).ToList(); } else { activities_result = dbContext.Activities.Select(x => x).ToList(); } var bookings_result = dbContext.Bookings.Select(x => x).ToList(); var result = bookings_result.Select(x => new { x.booking_date, x.activity_id }); var recent_activities = result.OrderByDescending(x => x.booking_date).Select(x => new { x.booking_date, x.activity_id }).Take(3); var activityNames = activities_result.Join(recent_activities, x => new { ActivityID = x.activity_id }, y => new { ActivityID = y.activity_id }, (x, y) => new { x.activity_name, x.activity_id }); List <VMActivityDetails> aresult = new List <VMActivityDetails>(); foreach (var item in activityNames) { VMActivityDetails activityItem = new VMActivityDetails(); activityItem.activity_id = item.activity_id; activityItem.activity_name = item.activity_name; //activityItem.ActivityAvgRating = item.avgrating; //activityItem.ActivityFee = item.activity_fee; aresult.Add(activityItem); } response = aresult; } catch (Exception ex) { //throw new NotImplementedException(); throw ex; } return(response); }