Witam,
Od jakiegoś czasu uczę się MVC 5 i postanowiłem zrobić prostą stronkę, na której można oddać głos w skali 1-10 na restaurację a następnie wyświetlić to jako ranking z możliwością sortowania:
Mam pytanie do wyświetlania tego rankingu. Za pierwszym razem kiedy wczytuję kontroler "Ranking" i akcję "Index" (wyświetla ranking). To pobieram dane z bazy i wyświetlam je i to jest logiczne i jasne.
Natomiast kiedy użytkownik naciśnie na nagłówek nazwa to dane sortują się po nazwie - znowu jest wejście do "Ranking", "Index" i znowu pobieranie danych z bazy itd.
Czy to nie będzie trwało zbyt długo? Nie powinienem zrobić tego w ten sposób, że te dane są już w jakiejś właściwości globalnej i gdy użytkownik sortuje to wykona się sortowanie tej globalnej właściwości?
W tej chwili wygląda to tak:
public ActionResult Index(string sort)
{
RankingListViewModel rlvm = new RankingListViewModel();
List<RankingViewModel> listrvm = new List<RankingViewModel>();
RankingBusinessLayer rbl = new RankingBusinessLayer();
List<Restaurant> restaurant = rbl.GetRestaurant();
List<RestaurantRate> restaurantRates = rbl.GetRestaurantRates();
foreach (Restaurant r in restaurant)
{
RankingViewModel rvm = new RankingViewModel();
var listOfRate = from rr in restaurantRates
where rr.RestaurantID == r.RestaurantID
select rr.RateID;
rvm.Name = r.Name;
int suma = listOfRate.Sum();
double count = listOfRate.Count();
rvm.Avg = suma / count;
listrvm.Add(rvm);
}
rlvm.Rankings = listrvm;
ViewBag.SortByName = sort == null ? "Nazwa_Malejaco" : "";
ViewBag.SortByAvg = sort == "Avg_Malejaco" ? "Avg_Rosnaco" : "Avg_Malejaco";
var list = from l in rlvm.Rankings
select l;
switch (sort)
{
case "Nazwa_Malejaco":
list = list.OrderByDescending(s => s.Name);
break;
case "Avg_Malejaco":
list = list.OrderByDescending(s => s.Avg);
break;
case "Avg_Rosnaco":
list = list.OrderBy(s => s.Avg);
break;
default:
list = list.OrderBy(s => s.Name);
break;
}
rlvm.Rankings = list.ToList();
return View(rlvm);
}
No i właśnie zastanawiam się, czy to jest OK bo w sumie w momencie odświeżania mogłyby dojść jakieś nowe głosy do bazy więc dobrze gdy jest aktualna w każdym momencie, z drugiej strony każde sortowanie wiąże się z wyciąganiem tych danych - co zabiera trochę pamięci i czasu.