コード例 #1
0
        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));
        }
コード例 #2
0
 public Task <IQueryable <Meetup> > Handle(MeetupQuery request, CancellationToken cancellationToken)
 {
     return(Task.FromResult(_meetupStorage.Meetups.OrderByDescending(m => m.Date).AsQueryable()));
 }