public ActionResult GetMoreGigs(int startIndex, string searchBy, string query = null) { GigFilterParams filter = new GigFilterParams { SearchTerm = query, SearchBy = searchBy }; var upcomingGigs = _unitOfWork.Gigs.GetUpcomingGigs(startIndex, AppConst.PageSizeSm, filter); if (!upcomingGigs.Any()) { return(Content(HttpStatusCode.NoContent.ToString())); } var userId = User.Identity.GetUserId(); var attendances = _unitOfWork.Attendances.GetFutureAttendances(userId) .ToLookup(a => a.GigId); var viewModel = new GigsViewModel { UpcomingGigs = upcomingGigs, ShowActions = User.Identity.IsAuthenticated, Attendances = attendances }; return(PartialView("_MoreGigs", viewModel)); }
private Expression <Func <Gig, bool> > _getMyAttendingGigFilterExpression(GigFilterParams filter) { Expression <Func <Gig, bool> > filterExpression = g => g.DateTime > DateTime.Now; return(string.IsNullOrWhiteSpace(filter.SearchTerm) ? filterExpression : ExpressionCombiner.And(filterExpression, getSeachFilter(filter))); }
private Expression <Func <Gig, bool> > _getGigFilterExpression(GigFilterParams filter) { Expression <Func <Gig, bool> > filterExpression = g => g.DateTime > DateTime.Now && g.Artist.Activated && !g.IsCancelled; return(string.IsNullOrWhiteSpace(filter.SearchTerm) ? filterExpression : ExpressionCombiner.And(filterExpression, getSeachFilter(filter))); }
public IEnumerable <Gig> GetUpcomingGigs(int?startIndex, int?count, GigFilterParams filter) { var gigFilterExpression = _getGigFilterExpression(filter); IQueryable <Gig> query = _context.Gigs .Include(g => g.Artist) .Include(g => g.Genre) .Include(g => g.Venue) .Where(gigFilterExpression) .OrderBy(g => g.DateTime); if (!startIndex.HasValue || !count.HasValue) { return(query.ToList()); } return(query.Skip(startIndex.Value).Take(count.Value).ToList()); }
private Expression <Func <Gig, bool> > getSeachFilter(GigFilterParams filter) { var searchTerm = filter.SearchTerm; switch (filter.SearchBy) { case AppConst.SearchAll: Expression <Func <Gig, bool> > allExpression = g => g.Artist.Name.Contains(searchTerm) || g.Genre.Name.Contains(searchTerm) || g.Venue.Name.Contains(searchTerm); return(allExpression); case AppConst.SearchByArtist: Expression <Func <Gig, bool> > artistExpression = g => g.Artist.Name.Contains(searchTerm); return(artistExpression); case AppConst.SearchByGener: Expression <Func <Gig, bool> > genreExpression = g => g.Genre.Name.Contains(searchTerm); return(genreExpression); case AppConst.SearchByVenue: Expression <Func <Gig, bool> > venueExpression = g => g.Venue.Name.Contains(searchTerm); return(venueExpression); default: return(null); } }
public IEnumerable <Gig> GetGigsUserAttending(string userId, int startIndex, int count, GigFilterParams filter) { var gigFilterExpression = _getMyAttendingGigFilterExpression(filter); IQueryable <Gig> query = _context.Attendances .Where(a => a.AttendeeId == userId) .Select(a => a.Gig) .Include(g => g.Artist) .Include(g => g.Genre) .Include(g => g.Venue) .Where(gigFilterExpression) .OrderBy(g => g.DateTime); return(query.Skip(startIndex).Take(count).ToList()); }