private async Task UpdateFractionStatistic(string fractionName) { Fraction fraction = await GetOrCreateFraction(fractionName); var timeStamp = DateTime.Now; var yesterday = timeStamp.AddDays(-1); var wins = await _db.Fractions.Include(b => b.PlayedMatches).ThenInclude(m => m.Match) .Where(f => f.Name == fractionName) .SelectMany(b => b.PlayedMatches.Where(m => m.Match.Date > yesterday)) .CountAsync(m => m.Team == m.Match.Winner); var count = await _db.Fractions.Include(b => b.PlayedMatches).ThenInclude(m => m.Match) .Where(f => f.Name == fractionName) .SelectMany(b => b.PlayedMatches.Where(m => m.Match.Date > yesterday)) .CountAsync(); var pickRate = await _db.Matches.Include(m => m.PlayerData) .Where(m => m.Date > yesterday) .AverageAsync(m => m.PlayerData.Count(p => p.FractionName == fractionName)); FractionStatistic statistic = new FractionStatistic() { TimeStamp = timeStamp, Fraction = fraction, FractionName = fractionName, WonGames = wins, LostGames = count - wins, PickRate = (float)pickRate }; _db.Update(fraction); _db.FractionStatistics.Add(statistic); }
public async Task OnGetAsync(string builder) { BuilderName = builder ?? ""; Builder = await _db.Fractions.Include(b => b.Units) .ThenInclude(u => u.Abilities) .ThenInclude(a => a.Ability) .Include(b => b.Units) .ThenInclude(u => u.SpawnAbility) .Include(b => b.Units) .ThenInclude(u => u.Statistics) .Include(b => b.Statistics) .SingleOrDefaultAsync(f => f.Name == BuilderName); if (Builder != null) { Statistic = Builder.CurrentStatistic; } }