public async Task <IActionResult> Dragons(string name, int minCurHealth = 0, int maxCurHealth = Dragon.MAX_HEALTH + 1, int minHealth = Dragon.MIN_HEALTH - 1, int maxHealth = Dragon.MAX_HEALTH + 1, //фильтры int page = 1, //пагинация SortState sortOrder = SortState.NameAsc) //сортировка { var id = GetHeroIdFromToken((Request.Cookies[_tokenName])); var hero = _context.Heroes.ToList().FirstOrDefault(h => h.Id == id); if (hero != null) { IEnumerable <DragonInfoModel> dragons = GetDragonInfoList(await _context.Dragons.ToListAsync(), hero.Id).Where(d => d.CurrentHealth > 0); //фильтрация if (!string.IsNullOrWhiteSpace(name)) { dragons = dragons.Where(p => p.Name.ToLower().StartsWith(name.ToLower())); //если имя начинается с указаной строки БЕЗ учета регистра } dragons = dragons.Where(d => d.CurrentHealth > minCurHealth && d.CurrentHealth < maxCurHealth); //текущие жизни dragons = dragons.Where(d => d.AllHealth > minHealth && d.CurrentHealth < maxHealth); //начальные жизни // сортировка switch (sortOrder) { case SortState.NameDesc: dragons = dragons.OrderByDescending(s => s.Name); break; default: dragons = dragons.OrderBy(s => s.Name); break; } // пагинация var count = dragons.Count(); var items = dragons.Skip((page - 1) * PAGE_SIZE).Take(PAGE_SIZE).ToList(); // формируем модель представления DragonViewModel viewModel = new DragonViewModel { PageViewModel = new PageViewModel(count, page, PAGE_SIZE), SortViewModel = new SortModel(sortOrder), FilterViewModel = new DragonFilterModel(name, minCurHealth, maxCurHealth, minHealth, maxHealth), Dragons = items }; ViewData["menu-title"] = "Драконы"; ViewData["hero"] = hero; return(View(viewModel)); } else { return(RedirectToAction("Index")); } }
public async Task <IActionResult> Stat(int page = 1, SortState sortOrder = SortState.NameAsc) { var id = GetHeroIdFromToken((Request.Cookies[_tokenName])); var hero = _context.Heroes.ToList().FirstOrDefault(h => h.Id == id); if (hero != null) { IEnumerable <DragonInfoModel> dragons = GetDragonInfoList(await _context.Dragons.ToListAsync(), hero.Id).Where(d => d.AmountHeroDamageForThisDragon > 0); // сортировка switch (sortOrder) { case SortState.NameDesc: dragons = dragons.OrderByDescending(s => s.Name); break; case SortState.DamageDesc: dragons = dragons.OrderByDescending(s => s.AmountHeroDamageForThisDragon); break; case SortState.DamageAsc: dragons = dragons.OrderBy(s => s.AmountHeroDamageForThisDragon); break; default: dragons = dragons.OrderBy(s => s.Name); break; } // пагинация var count = dragons.Count(); var items = dragons.Skip((page - 1) * PAGE_SIZE).Take(PAGE_SIZE).ToList(); // формируем модель представления DragonViewModel viewModel = new DragonViewModel { PageViewModel = new PageViewModel(count, page, PAGE_SIZE), SortViewModel = new SortModel(sortOrder), Dragons = items }; ViewData["menu-title"] = $"Статистика героя {hero.Name}"; ViewData["hero"] = hero; return(View(viewModel)); } else { return(RedirectToAction("Index")); } }