public ActionResult All(string orderBy, string search, int id = 1) { if (string.IsNullOrEmpty(search)) { search = string.Empty; } search = search.ToLower(); var page = id; var allTrips = this.trips.GetAll() .Where(x => x.Creator.UserName.ToLower().Contains(search) || x.StartPoint.ToLower().Contains(search)) .Count(); var tripsPerPage = 5; var totalPages = (int)Math.Ceiling(allTrips / ((decimal)tripsPerPage)); if (page - 1 < 0) { page = 1; } else if (page - 1 >= totalPages) { page = totalPages; } var itemsToSkip = (page - 1) * tripsPerPage; IList <TripResponseModel> trips = new List <TripResponseModel>(); var filtredtrips = this.trips.GetAll() .Where(x => x.Creator.UserName.ToLower().Contains(search) || x.StartPoint.ToLower().Contains(search)); var lastSort = (string)this.Session["LastSort"]; IOrderedQueryable <Trip> sortedTrips = filtredtrips .OrderBy(x => x.CreatedOn) .ThenBy(x => x.Creator.UserName); if (!string.IsNullOrEmpty(orderBy)) { if (orderBy == "creator") { var creator = this.Session["creator"] as string; if (creator == null) { creator = "asc"; } if (page == 1 && lastSort == "creator") { this.Session["creator"] = creator == "asc" ? "desc" : "asc"; } creator = this.Session["creator"] as string; sortedTrips = this.OrderByCreator(creator, itemsToSkip, tripsPerPage, filtredtrips); this.Session["LastSort"] = "creator"; } else if (orderBy == "createdOn") { var creator = this.Session["createdOn"] as string; if (creator == null) { creator = "asc"; } if (page == 1 && lastSort == "createdOn") { this.Session["createdOn"] = creator == "asc" ? "decs" : "asc"; } creator = this.Session["createdOn"] as string; sortedTrips = this.OrderByCreatedOn(creator, itemsToSkip, tripsPerPage, filtredtrips); this.Session["LastSort"] = "createdOn"; } else if (orderBy == "startPoint") { var creator = this.Session["startPoint"] as string; if (creator == null) { creator = "asc"; } if (page == 1 && lastSort == "startPoint") { this.Session["startPoint"] = creator == "asc" ? "desc" : "asc"; } creator = this.Session["startPoint"] as string; sortedTrips = this.OrderByStartPoint(creator, itemsToSkip, tripsPerPage, filtredtrips); this.Session["LastSort"] = "startPoint"; } } var all = sortedTrips .Skip(itemsToSkip) .Take(tripsPerPage) .To <TripResponseModel>() .ToList(); var tripModel = new TripPagableModel { CurrentPage = page, TotalPages = totalPages, AllTrips = all }; return(View(tripModel)); }
public ActionResult All(string orderBy, string search, int id = 1) { if (string.IsNullOrEmpty(search)) { search = string.Empty; } search = search.ToLower(); var page = id; var allTrips = this.trips.GetAll() .Where(x => x.Creator.UserName.ToLower().Contains(search) || x.StartPoint.ToLower().Contains(search)) .Count(); var tripsPerPage = 5; var totalPages = (int)Math.Ceiling(allTrips / ((decimal)tripsPerPage)); if (page - 1 < 0) { page = 1; } else if (page - 1 >= totalPages) { page = totalPages; } var itemsToSkip = (page - 1) * tripsPerPage; IList<TripResponseModel> trips = new List<TripResponseModel>(); var filtredtrips = this.trips.GetAll() .Where(x => x.Creator.UserName.ToLower().Contains(search) || x.StartPoint.ToLower().Contains(search)); var lastSort = (string)this.Session["LastSort"]; IOrderedQueryable<Trip> sortedTrips = filtredtrips .OrderBy(x => x.CreatedOn) .ThenBy(x => x.Creator.UserName); if (!string.IsNullOrEmpty(orderBy)) { if (orderBy == "creator") { var creator = this.Session["creator"] as string; if (creator == null) { creator = "asc"; } if (page == 1 && lastSort == "creator") { this.Session["creator"] = creator == "asc" ? "desc" : "asc"; } creator = this.Session["creator"] as string; sortedTrips = this.OrderByCreator(creator, itemsToSkip, tripsPerPage, filtredtrips); this.Session["LastSort"] = "creator"; } else if (orderBy == "createdOn") { var creator = this.Session["createdOn"] as string; if (creator == null) { creator = "asc"; } if (page == 1 && lastSort == "createdOn") { this.Session["createdOn"] = creator == "asc" ? "decs" : "asc"; } creator = this.Session["createdOn"] as string; sortedTrips = this.OrderByCreatedOn(creator, itemsToSkip, tripsPerPage, filtredtrips); this.Session["LastSort"] = "createdOn"; } else if (orderBy == "startPoint") { var creator = this.Session["startPoint"] as string; if (creator == null) { creator = "asc"; } if (page == 1 && lastSort == "startPoint") { this.Session["startPoint"] = creator == "asc" ? "desc" : "asc"; } creator = this.Session["startPoint"] as string; sortedTrips = this.OrderByStartPoint(creator, itemsToSkip, tripsPerPage, filtredtrips); this.Session["LastSort"] = "startPoint"; } } var all = sortedTrips .Skip(itemsToSkip) .Take(tripsPerPage) .To<TripResponseModel>() .ToList(); var tripModel = new TripPagableModel { CurrentPage = page, TotalPages = totalPages, AllTrips = all }; return View(tripModel); }