コード例 #1
0
        public async Task <IActionResult> Get([FromQuery] AuthorSearchRequest request)
        {
            PagedList <AuthorDto>     result  = null;
            PagedList <ExpandoObject> result2 = null;

            if (!string.IsNullOrEmpty(request.Fields))
            {
                result2 = await _authorService.GetPagedWithFieldsAsync(request);
            }
            else
            {
                result = await _authorService.GetPagedAsync(request);
            }

            if (result == null && result2 == null)
            {
                return(NotFound());
            }

            if (result != null)
            {
                return(Ok(result));
            }

            return(Ok(result2));
        }
コード例 #2
0
        public async Task <PagedList <ExpandoObject> > GetPagedWithFieldsAsync(AuthorSearchRequest request)
        {
            var query = _context.Authors.AsNoTracking();

            ApplyFiltering(ref query, request);
            ApplyOrdering(ref query, request);
            ApplyPaging(ref query, request);

            List <AuthorDto> list = await query.Select(x => x.ToDto())
                                    .ToListAsync();

            return(new PagedList <ExpandoObject>(list.ShapeData(request.Fields).ToList()));
        }
コード例 #3
0
        public async Task <PagedList <AuthorDto> > GetPagedAsync(AuthorSearchRequest request)
        {
            var query = _context.Authors.AsNoTracking();

            ApplyFiltering(ref query, request);
            ApplyOrdering(ref query, request);
            ApplyPaging(ref query, request);

            List <AuthorDto> list = await query.Select(x => x.ToDto())
                                    .ToListAsync();

            return(new PagedList <AuthorDto>(list));
        }
コード例 #4
0
        private void ApplyFiltering(ref IQueryable <AuthorEntity> query, AuthorSearchRequest request)
        {
            if (!string.IsNullOrEmpty(request.Term))
            {
                query = query.Where(x => x.FirstName.ToLower().Contains(request.Term.Trim().ToLower()) ||
                                    x.LastName.ToLower().Contains(request.Term.Trim().ToLower()) ||
                                    x.MainCategory.ToLower().Contains(request.Term.Trim().ToLower()));
            }

            if (!string.IsNullOrEmpty(request.Name))
            {
                query = query.Where(x => x.FirstName.ToLower().Contains(request.Name.Trim().ToLower()) ||
                                    x.LastName.ToLower().Contains(request.Name.Trim().ToLower()));
            }

            if (!string.IsNullOrEmpty(request.MainCategory))
            {
                query = query.Where(x => x.MainCategory.ToLower().Contains(request.MainCategory.Trim().ToLower()));
            }
        }
コード例 #5
0
        private void ApplyOrdering(ref IQueryable <AuthorEntity> query, AuthorSearchRequest request)
        {
            switch (request.OrderBy)
            {
            case AuthorOrderBy.AGE:
                if (request.SortOrder == SortOrder.Descending)
                {
                    query = query.OrderByDescending(a => a.DateOfBirth);
                }
                else
                {
                    query = query.OrderBy(a => a.DateOfBirth);
                }

                break;

            case AuthorOrderBy.MAIN_CATEGORY:
                if (request.SortOrder == SortOrder.Descending)
                {
                    query = query.OrderByDescending(a => a.MainCategory);
                }
                else
                {
                    query = query.OrderBy(a => a.MainCategory);
                }

                break;

            default:
                if (request.SortOrder == SortOrder.Descending)
                {
                    query = query.OrderByDescending(a => a.FirstName).ThenBy(a => a.LastName);
                }
                else
                {
                    query = query.OrderBy(a => a.FirstName).ThenBy(a => a.LastName);
                }

                break;
            }
        }
コード例 #6
0
 private void ApplyPaging(ref IQueryable <AuthorEntity> query, AuthorSearchRequest request)
 {
     query = query.Skip(request.PageSize * (request.PageNumber - 1))
             .Take(request.PageSize);
 }