public async Task <ActionResult> Index(string filterText, int index = 0, FilterEventOptions filterBy = FilterEventOptions.None, bool isFirstLoad = true) { var data = await _eventService.GetPublishedEventsAsync(filterBy, filterText, Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName); ViewBag.Count = data.Count(); ViewBag.PageSize = _eventPageSize; ViewBag.CurrentIndex = index; ViewBag.FilterOption = filterBy; ViewBag.FilterText = filterText; if (isFirstLoad) { return(View(data.Skip(index).Take(_eventPageSize))); } else { return(PartialView("~/Views/Home/Partial/_EventList.cshtml", data.Skip(index).Take(_eventPageSize))); } }
public Task <IEnumerable <EventModel> > GetPublishedEvents(FilterEventOptions filter, string filterText = null, string dateCulture = null) { var result = new List <EventModel>(); var eventsList = _context.EventRepository.GetList(); var areasList = _context.EventAreaRepository.GetList(); var data = from events in eventsList join areas in areasList on events.Id equals areas.EventId where areas.Price > 0 group areas by areas.EventId into areaGroup where areaGroup.Count() == (from areas in areasList where areas.EventId == areaGroup.Key select areas.EventId).Count() join events in eventsList on areaGroup.Key equals events.Id join layouts in _context.LayoutRepository.GetList() on events.LayoutId equals layouts.Id join venues in _context.VenueRepository.GetList() on layouts.VenueId equals venues.Id select new { venue = venues, currentEvent = events }; switch (filter) { case FilterEventOptions.Title: if (!string.IsNullOrEmpty(filterText)) { data = from events in data where events.currentEvent.Title.IndexOf(filterText, 0, StringComparison.OrdinalIgnoreCase) != -1 select events; } break; case FilterEventOptions.Date: if (!string.IsNullOrEmpty(filterText) && !string.IsNullOrEmpty(dateCulture)) { DateTime date; try { date = DateTime.Parse(filterText, new CultureInfo(dateCulture)); } catch (FormatException) { break; } data = from events in data where events.currentEvent.Date.Year == date.Date.Year && events.currentEvent.Date.Month == date.Date.Month && events.currentEvent.Date.Day == date.Date.Day select events; } break; } //gets events which don't happened by venue's local date var list = (from events in data.AsEnumerable() where !IsPastDate(events.currentEvent.Date, events.venue.Timezone) select events).ToList(); if (!list.Any()) { return(Task.FromResult(result.AsEnumerable())); } list.ToList().ForEach(x => { if (!result.Any(y => y.Event.Id == x.currentEvent.Id)) { var add = new EventModel { Event = MapToEventDto(x.currentEvent), Venue = new VenueDto { Address = x.venue.Address, Name = x.venue.Name, Phone = x.venue.Phone, Timezone = x.venue.Timezone } }; result.Add(add); } }); result.OrderBy(x => x.Event.Date); return(Task.FromResult(result.AsEnumerable())); }