コード例 #1
0
        public async Task <PageListDTO <D> > GetPageList(CommonFilter filter)
        {
            PageListDTO <D> result = new PageListDTO <D>();

            result.CurrentPage = 0;
            result.TotalPages  = 1;

            List <LinqOrderRule> orders = new List <LinqOrderRule>();

            if (filter != null && filter.OrderRules != null)
            {
                orders = filter.OrderRules.ToList();
            }

            List <LinqFilterRule> rules = new List <LinqFilterRule>();

            if (filter != null && filter.FilterRules != null)
            {
                rules = filter.FilterRules.ToList();
            }

            var items = await _repo.FindAsync(orders, rules, filter.Includes);

            int totalItems = items.Count();

            if (filter.ItemsPerPage != null && filter.IndexPage >= 0)
            {
                result.ItemsPerPages = filter.ItemsPerPage.Value;
                result.CurrentPage   = filter.IndexPage.Value;
                if (totalItems > filter.ItemsPerPage)
                {
                    decimal pages    = totalItems / filter.ItemsPerPage.Value;
                    decimal numpages = Math.Truncate(pages);
                    if ((numpages * filter.ItemsPerPage.Value) < totalItems)
                    {
                        result.TotalPages = Convert.ToInt32(numpages) + 1;
                    }
                    else
                    {
                        result.TotalPages = Convert.ToInt32(numpages);
                    }

                    if (result.TotalPages < filter.IndexPage)
                    {
                        filter.IndexPage = result.TotalPages - 1;
                    }

                    items = items.Skip(filter.IndexPage.Value * filter.ItemsPerPage.Value).Take(filter.ItemsPerPage.Value);
                }
            }
            else
            {
                result.ItemsPerPages = totalItems;
            }

            result.Items = _mapper.Map <IList <D> >(items.ToList());

            return(result);
        }
コード例 #2
0
        public JsonResult Find(UserFindDTO param)
        {
            var query = UserManager.Users.AsQueryable();

            if (!string.IsNullOrEmpty(param.Email))
            {
                query = query.Where(t => t.Email.StartsWith(param.Email));
            }

            int total = query.Count();

            if (param.SortBy == "email" && param.SortDir == "asc")
            {
                query = query.OrderBy(t => t.Email);
            }
            else if (param.SortBy == "email" && param.SortDir == "desc")
            {
                query = query.OrderByDescending(t => t.Email);
            }
            else
            {
                query = query.OrderBy(t => t.Email);
            }

            int pages = (int)Math.Ceiling((double)total / param.PageSize);
            int skip  = (param.PageNumber - 1) * param.PageSize;
            var data  = query.Skip(skip).Take(param.PageSize)
                        .Select(t => new UserLiteDTO
            {
                Id    = t.Id,
                Email = t.Email
            }).ToList();

            var dto = new PageListDTO <IEnumerable <UserLiteDTO> >()
            {
                Total = total,
                Data  = data
            };

            return(Json(dto, JsonRequestBehavior.AllowGet));
        }