public ActionResult <List <MeetupDetailsDto> > GetAll([FromQuery] MeetupQuery query) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var baseQuery = _meetupContext.Meetups .Include(m => m.Location) .Include(m => m.Lectures) .Where(m => query.SearchPhrase == null || (m.Organizer.ToLower().Contains(query.SearchPhrase.ToLower()) || m.Name.ToLower().Contains(query.SearchPhrase.ToLower()))); if (!string.IsNullOrEmpty(query.SortBy)) { var propertySelectors = new Dictionary <string, Expression <Func <Meetup, object> > >() { { nameof(Meetup.Name), meetup => meetup.Name }, { nameof(Meetup.Date), meetup => meetup.Date }, { nameof(Meetup.Organizer), meetup => meetup.Organizer } }; var propertySelector = propertySelectors[query.SortBy]; baseQuery = query.SortDirection == SortDirection.ASC ? baseQuery.OrderBy(propertySelector) : baseQuery.OrderByDescending(propertySelector); } var meetups = baseQuery .Skip(query.PageSize * (query.PageNumber - 1)) .Take(query.PageSize) .ToList(); var itemsCount = baseQuery.Count(); var meetupDtos = _mapper.Map <List <MeetupDetailsDto> >(meetups); var result = new PageResult <MeetupDetailsDto>(meetupDtos, itemsCount, query.PageSize, query.PageNumber); return(Ok(result)); }
public Task <IQueryable <Meetup> > Handle(MeetupQuery request, CancellationToken cancellationToken) { return(Task.FromResult(_meetupStorage.Meetups.OrderByDescending(m => m.Date).AsQueryable())); }