public async Task <ViewResult> Index(string filter = null, SortType sort = SortType.Created, bool isLive = false, int page = 1) { var viewModel = new PagingItemViewModel <Room>() { IsLive = false }; IQueryable <Room> items = db.Rooms.Where(c => !c.IsHidden); if (filter != null) { items = items.Where(c => c.DisplayName.Contains(filter)); viewModel.Query = filter; } if (isLive) { items = items.Where(c => c.IsLive); viewModel.IsLive = true; } switch (sort) { case SortType.Visitor: items = items.OrderByDescending(c => c.TotalVisitor); viewModel.SortType = SortType.Visitor; break; case SortType.Created: default: items = items.OrderByDescending(c => c.CreatedAt); viewModel.SortType = SortType.Created; break; } // トータル投稿数 viewModel.TotalCount = await items.CountAsync(); // トータルページ数 viewModel.TotalPages = (viewModel.TotalCount - 1) / PagingItemCount + 1; if (viewModel.TotalPages < page) { viewModel.CurrentPage = 1; } else { viewModel.CurrentPage = page; } // StartPageのNumber viewModel.StartPage = viewModel.CurrentPage - PagingItemCount; if (viewModel.StartPage < 1) { viewModel.StartPage = 1; } // EndPageのNumber viewModel.EndPage = viewModel.CurrentPage + PagingItemCount - 1; if (viewModel.EndPage > viewModel.TotalPages) { viewModel.EndPage = viewModel.TotalPages; } // 最初のn件だけ要素を取得 viewModel.Results = await items.Skip((viewModel.CurrentPage - 1) *PagingItemCount).Take(PagingItemCount).ToListAsync(); return(View(viewModel)); }
public async Task<ViewResult> Index(string filter = null, SortType sort = SortType.Created, bool isLive = false, int page = 1) { var viewModel = new PagingItemViewModel<Room>() { IsLive = false }; IQueryable<Room> items = db.Rooms.Where(c => !c.IsHidden); if (filter != null) { items = items.Where(c => c.DisplayName.Contains(filter)); viewModel.Query = filter; } if (isLive) { items = items.Where(c => c.IsLive); viewModel.IsLive = true; } switch (sort) { case SortType.Visitor: items = items.OrderByDescending(c => c.TotalVisitor); viewModel.SortType = SortType.Visitor; break; case SortType.Created: default: items = items.OrderByDescending(c => c.CreatedAt); viewModel.SortType = SortType.Created; break; } // トータル投稿数 viewModel.TotalCount = await items.CountAsync(); // トータルページ数 viewModel.TotalPages = (viewModel.TotalCount - 1) / PagingItemCount + 1; if (viewModel.TotalPages < page) { viewModel.CurrentPage = 1; } else { viewModel.CurrentPage = page; } // StartPageのNumber viewModel.StartPage = viewModel.CurrentPage - PagingItemCount; if (viewModel.StartPage < 1) viewModel.StartPage = 1; // EndPageのNumber viewModel.EndPage = viewModel.CurrentPage + PagingItemCount - 1; if (viewModel.EndPage > viewModel.TotalPages) viewModel.EndPage = viewModel.TotalPages; // 最初のn件だけ要素を取得 viewModel.Results = await items.Skip((viewModel.CurrentPage - 1) * PagingItemCount).Take(PagingItemCount).ToListAsync(); return View(viewModel); }