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); }
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)); }