protected virtual async Task <PagedSearchResult <TDto> > GetPagedSearchEnumerableAsync(
            PagedSearchParameter parameter,
            IQueryable <TEntity> queryable)
        {
            var result = new PagedSearchResult <TDto>();

            queryable = string.IsNullOrEmpty(parameter.OrderByFieldName)
                ? GetOrderedQueryableEntity(queryable, "Id", FrameworkCoreConstant.SortOrder.Ascending)
                : GetOrderedQueryableEntity(queryable, parameter.OrderByFieldName, parameter.SortOrder);

            result.Count = await queryable.CountAsync();

            var entityList = parameter.PageSize == -1
                ? await queryable.ToListAsync()
                : await queryable.Skip(parameter.PageIndex *parameter.PageSize).Take(parameter.PageSize).ToListAsync();

            foreach (var entity in entityList)
            {
                var dto = new TDto();
                EntityToDto(entity, dto);
                result.Result.Add(dto);
            }

            return(result);
        }
        public virtual async Task <PagedSearchResult <TDto> > PagedSearchAsync(PagedSearchParameter parameter)
        {
            var dbSet     = this.Context.Set <TEntity>();
            var queryable = string.IsNullOrEmpty(parameter.Filters)
                ? dbSet.AsQueryable()
                : dbSet.Where(parameter.Filters);

            queryable = string.IsNullOrEmpty(parameter.Keyword)
                ? queryable
                : GetKeywordPagedSearchQueryable(queryable, parameter.Keyword);

            return(await GetPagedSearchEnumerableAsync(parameter, queryable));
        }
        public override async Task <PagedSearchResult <RentalDto> > PagedSearchAsync(PagedSearchParameter parameter)
        {
            var dbSet = this.Context.Set <ComRental>()
                        .Include(item => item.Book)
                        .Include(item => item.Customer);

            var queryable = string.IsNullOrEmpty(parameter.Filters)
                ? dbSet.AsQueryable()
                : dbSet.Where(parameter.Filters);

            queryable = string.IsNullOrEmpty(parameter.Keyword)
                ? queryable
                : GetKeywordPagedSearchQueryable(queryable, parameter.Keyword);

            return(await GetPagedSearchEnumerableAsync(parameter, queryable));
        }