コード例 #1
0
        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()));
        }