public IEnumerable <T> GetAll <T>(LakesAllInputModel input) { var query = this.lakeRepository.All().AsQueryable(); switch (input.Type) { case "Free": query = query.Where(l => l.IsFree); break; case "Paid": query = query.Where(l => !l.IsFree); break; } switch (input.Order) { case "Rating ASC": query = query.OrderBy(x => x.LakeVotes.Average(lv => lv.Vote.Value)); break; case "Rating DESC": query = query.OrderByDescending(x => x.LakeVotes.Average(lv => lv.Vote.Value)); break; case "Trophies Count ASC": query = query.OrderBy(x => x.Trophies.Count()); break; case "Trophies Count DESC": query = query.OrderByDescending(x => x.Trophies.Count()); break; } if (!string.IsNullOrEmpty(input.Search)) { query = query.Where(l => l.Name.ToLower().Contains(input.Search.ToLower())); } return(query .Skip((input.Page - 1) * GlobalConstants.LakesCountPerPage) .Take(GlobalConstants.LakesCountPerPage) .To <T>() .ToList()); }
public IActionResult All(LakesAllInputModel input) { if (input.Page <= 0) { return(this.NotFound()); } var lakes = this.lakesService.GetAll <LakeInListViewModel>(input); var lakesCount = input.Type switch { "Free" => this.lakesService.GetFreeCount(), "Paid" => this.lakesService.GetPaidCount(), _ => this.lakesService.GetCount(), }; if (!string.IsNullOrEmpty(input.Search)) { lakesCount = this.lakesService.GetSearchCount(input.Type, input.Search); } var viewModel = new LakesListViewModel() { ItemsPerPage = GlobalConstants.LakesCountPerPage, ItemsCount = lakesCount, PageNumber = input.Page, Lakes = lakes, Search = input.Search, CurrStatus = input.Type ?? "Type", StatusTypes = new string[] { "Type", "Free", "Paid" }, CurrOrder = input.Order ?? "Order By", OrderTypes = new string[] { "Order By", "Rating ASC", "Rating DESC", "Trophies Count ASC", "Trophies Count DESC" }, }; return(this.View(viewModel)); }