public ActionResult ShowChampionInfo(string filter, DateTime?beginDate) { var allRecodes = lolService.GetAllRecords().Where(r => r.Battle.BattleType == 6).IncludeProperties(r => r.Battle).OrderByDescending(r => r.Battle.StartTime).AsQueryable(); if (!string.IsNullOrWhiteSpace(filter)) { var num = Convert.ToInt32(filter); if (num >= 100) { allRecodes = allRecodes.Take(10 * num); } else { var startTime = DateTime.Now.AddMonths(-num); allRecodes = allRecodes.Where(r => r.Battle.StartTime > startTime); } } if (beginDate.HasValue) { allRecodes = allRecodes.Where(r => r.Battle.StartTime > beginDate); } var recodes = allRecodes.Select(l => new { l.ChampionId, l.IsWin, l.Name, l.Contribute, l.ContributeOrder }).ToList(); var champions = from r in recodes group r by r.ChampionId into g select g.Key; var model = new List <LolChampionInfoViewModel>(); foreach (var c in champions) { var heroRecords = recodes.Where(a => a.ChampionId == c).ToList(); model.Add(new LolChampionInfoViewModel { ChampionId = c, TotalApprance = heroRecords.Count, TotalWinCount = heroRecords.Count(a => a.IsWin == 1), MyApprance = heroRecords.Count(a => MyHeroList.Contains(a.Name)), MyWinCount = heroRecords.Where(a => MyHeroList.Contains(a.Name)).Count(a => a.IsWin == 1), MyContribute = heroRecords.Any(a => MyHeroList.Contains(a.Name)) ? heroRecords.Where(a => MyHeroList.Contains(a.Name)).Average(a => a.ContributeOrder) : 0, TotalContribute = heroRecords.Average(a => a.ContributeOrder) }); } return(View(model.OrderByDescending(l => l.MyApprance).ToList())); }