private void ApplyResultChanges(DsTimeResultValue resultvalue, DsTimeResult result) { result.Count++; if (resultvalue.Win) { result.Wins++; } if (resultvalue.MVP) { result.MVP++; } result.Duration += resultvalue.Duration; result.Kills += resultvalue.Kills; result.Army += resultvalue.Army; foreach (var teammate in resultvalue.Teammates) { var rteammate = result.Teammates.FirstOrDefault(f => f.Cmdr == teammate.Cmdr); if (rteammate == null) { rteammate = new DsParticipant() { Cmdr = teammate.Cmdr }; result.Teammates.Add(rteammate); } rteammate.Count++; if (teammate.Win) { rteammate.Wins++; } } foreach (var opponent in resultvalue.Opponents) { var ropponent = result.Opponents.FirstOrDefault(f => f.Cmdr == opponent.Cmdr); if (ropponent == null) { ropponent = new DsParticipant() { Cmdr = opponent.Cmdr }; result.Opponents.Add(ropponent); } ropponent.Count++; if (opponent.Win) { ropponent.Wins++; } } }
private static void ApplyChanges(DsTimeResult result, List <DsTimeResultValue> values) { if (!values.Any()) { return; } result.Count += values.Count; result.Wins += values.Where(x => x.Win == true).Count(); result.MVP += values.Where(x => x.MVP == true).Count(); result.Duration += values.Sum(s => s.Duration); result.Kills += values.Sum(s => s.Kills); result.Army += values.Sum(s => s.Army); foreach (var cmdr in DSData.cmdrs) { var teammates = values.SelectMany(s => s.Teammates).Where(x => x.Cmdr == cmdr).ToList(); var opponents = values.SelectMany(s => s.Opponents).Where(x => x.Cmdr == cmdr).ToList(); var teammateParticipant = result.Teammates.SingleOrDefault(f => f.Cmdr == cmdr); if (teammateParticipant == null) { teammateParticipant = new DsParticipant() { Cmdr = cmdr }; result.Teammates.Add(teammateParticipant); } if (teammates.Any()) { teammateParticipant.Count += teammates.Count; teammateParticipant.Wins += teammates.Where(x => x.Win == true).Count(); } var opponentParticipant = result.Opponents.SingleOrDefault(s => s.Cmdr == cmdr); if (opponentParticipant == null) { opponentParticipant = new DsParticipant() { Cmdr = cmdr }; result.Opponents.Add(opponentParticipant); } if (opponents.Any()) { opponentParticipant.Count += opponents.Count; opponentParticipant.Wins += opponents.Where(x => x.Win == true).Count(); } } foreach (var teammate in values.SelectMany(s => s.Teammates)) { var rteammate = result.Teammates.FirstOrDefault(f => f.Cmdr == teammate.Cmdr); if (rteammate == null) { rteammate = new DsParticipant() { Cmdr = teammate.Cmdr }; result.Teammates.Add(rteammate); } rteammate.Count++; if (teammate.Win) { rteammate.Wins++; } } foreach (var opponent in values.SelectMany(s => s.Opponents)) { var ropponent = result.Opponents.FirstOrDefault(f => f.Cmdr == opponent.Cmdr); if (ropponent == null) { ropponent = new DsParticipant() { Cmdr = opponent.Cmdr }; result.Opponents.Add(ropponent); } ropponent.Count++; if (opponent.Win) { ropponent.Wins++; } } }
public static void CollectTimeResults2(sc2dsstatsContext context, ILogger logger, List <DsTimeResultValue> resultvalues = null) { DateTime lastDate = new DateTime(2018, 1, 1); if (resultvalues == null) { resultvalues = context.DsTimeResultValues .Include(i => i.Opponents) .Include(i => i.Teammates) .OrderBy(o => o.Gametime) .AsSplitQuery() .ToList(); if (!resultvalues.Any()) { return; } context.DsParticipantsValues.RemoveRange(resultvalues.SelectMany(s => s.Opponents)); context.DsParticipantsValues.RemoveRange(resultvalues.SelectMany(s => s.Teammates)); context.DsTimeResultValues.RemoveRange(resultvalues); lastDate = resultvalues.OrderBy(o => o.Gametime).First().Gametime.AddMonths(-1); } if (!resultvalues.Any()) { return; } //var results = context.DsTimeResults // .Include(i => i.Opponents) // .Include(i => i.Teammates) // .AsSplitQuery() // .ToList(); // first day next month DateTime dateTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month)).AddDays(1); string yearString = String.Empty; while (dateTime > lastDate) { DateTime _dateTime = dateTime.AddMonths(-1); string _yearString = _dateTime.ToString("yyyy"); string _monthString = _dateTime.ToString("yyyyMM"); bool doYear = false; if (yearString != _yearString) { doYear = true; yearString = _yearString; } logger.LogInformation($"Collecting timeresults {_monthString} ({_dateTime.ToString("yyyyMMdd")}-{dateTime.ToString("yyyyMMdd")})"); var timeValues = resultvalues.Where(x => x.Gametime >= _dateTime && x.Gametime < dateTime).ToList(); foreach (var cmdr in DSData.cmdrs) { var cmdrValues = timeValues.Where(x => x.Cmdr == cmdr).ToList(); var cmdrPlValues = timeValues.Where(x => x.Player && x.Cmdr == cmdr).ToList(); // var allResult = results.SingleOrDefault(s => s.Player == false && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == String.Empty); var allResult = context.DsTimeResults .Include(i => i.Opponents) .Include(i => i.Teammates) .SingleOrDefault(s => s.Player == false && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == String.Empty); if (allResult == null) { allResult = new DsTimeResult() { Player = false, Timespan = _monthString, Cmdr = cmdr, Opp = String.Empty, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; // results.Add(allResult); context.DsTimeResults.Add(allResult); } ApplyChanges(allResult, cmdrValues); // var allPlResult = results.SingleOrDefault(s => s.Player == true && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == String.Empty); var allPlResult = context.DsTimeResults .Include(i => i.Opponents) .Include(i => i.Teammates) .SingleOrDefault(s => s.Player == true && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == String.Empty); if (allPlResult == null) { allPlResult = new DsTimeResult() { Player = true, Timespan = _monthString, Cmdr = cmdr, Opp = String.Empty, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; // results.Add(allPlResult); context.DsTimeResults.Add(allPlResult); } ApplyChanges(allPlResult, cmdrPlValues); List <DsTimeResultValue> yearValues = new List <DsTimeResultValue>(); List <DsTimeResultValue> cmdrYearValues = new List <DsTimeResultValue>(); List <DsTimeResultValue> cmdrPlYearValues = new List <DsTimeResultValue>(); if (doYear) { yearValues = resultvalues.Where(x => x.Gametime >= new DateTime(_dateTime.Year, 1, 1) && x.Gametime < new DateTime(_dateTime.Year + 1, 1, 1)).ToList(); cmdrYearValues = yearValues.Where(x => x.Cmdr == cmdr).ToList(); cmdrPlYearValues = yearValues.Where(x => x.Player && x.Cmdr == cmdr).ToList(); // var allYearResult = results.SingleOrDefault(s => s.Player == false && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == String.Empty); var allYearResult = context.DsTimeResults .Include(i => i.Opponents) .Include(i => i.Teammates) .SingleOrDefault(s => s.Player == false && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == String.Empty); if (allYearResult == null) { allYearResult = new DsTimeResult() { Player = false, Timespan = _yearString, Cmdr = cmdr, Opp = String.Empty, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; // results.Add(allYearResult); context.DsTimeResults.Add(allYearResult); } ApplyChanges(allYearResult, cmdrYearValues); // var allPlYearResult = results.SingleOrDefault(s => s.Player == true && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == String.Empty); var allPlYearResult = context.DsTimeResults .Include(i => i.Opponents) .Include(i => i.Teammates) .SingleOrDefault(s => s.Player == true && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == String.Empty); if (allPlYearResult == null) { allPlYearResult = new DsTimeResult() { Player = true, Timespan = _yearString, Cmdr = cmdr, Opp = String.Empty, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; // results.Add(allPlYearResult); context.DsTimeResults.Add(allPlYearResult); } ApplyChanges(allPlYearResult, cmdrPlYearValues); } foreach (var vs in DSData.cmdrs) { var cmdrVsValues = cmdrValues.Where(x => x.Opp == vs).ToList(); var cmdrPlVsValues = cmdrPlValues.Where(x => x.Opp == vs).ToList(); // var allVsResult = results.SingleOrDefault(s => s.Player == false && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == vs); var allVsResult = context.DsTimeResults .Include(i => i.Opponents) .Include(i => i.Teammates).SingleOrDefault(s => s.Player == false && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == vs); if (allVsResult == null) { allVsResult = new DsTimeResult() { Player = false, Timespan = _monthString, Cmdr = cmdr, Opp = vs, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; // results.Add(allVsResult); context.DsTimeResults.Add(allVsResult); } ApplyChanges(allVsResult, cmdrVsValues); var allPlVsResult = context.DsTimeResults .Include(i => i.Opponents) .Include(i => i.Teammates).SingleOrDefault(s => s.Player == true && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == vs); if (allPlVsResult == null) { allPlVsResult = new DsTimeResult() { Player = true, Timespan = _monthString, Cmdr = cmdr, Opp = vs, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; // results.Add(allPlVsResult); context.DsTimeResults.Add(allPlVsResult); } ApplyChanges(allPlVsResult, cmdrPlVsValues); if (doYear) { var cmdrYearVsValues = cmdrYearValues.Where(x => x.Opp == vs).ToList(); var cmdrPlYearVsValues = cmdrPlYearValues.Where(x => x.Opp == vs).ToList(); var allYearVsResult = context.DsTimeResults .Include(i => i.Opponents) .Include(i => i.Teammates).SingleOrDefault(s => s.Player == false && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == vs); if (allYearVsResult == null) { allYearVsResult = new DsTimeResult() { Player = false, Timespan = _yearString, Cmdr = cmdr, Opp = vs, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; // results.Add(allYearVsResult); context.DsTimeResults.Add(allYearVsResult); } ApplyChanges(allYearVsResult, cmdrYearVsValues); var allPlYearVsResult = context.DsTimeResults .Include(i => i.Opponents) .Include(i => i.Teammates).SingleOrDefault(s => s.Player == true && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == vs); if (allPlYearVsResult == null) { allPlYearVsResult = new DsTimeResult() { Player = true, Timespan = _yearString, Cmdr = cmdr, Opp = vs, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; // results.Add(allPlYearVsResult); context.DsTimeResults.Add(allPlYearVsResult); } ApplyChanges(allPlYearVsResult, cmdrYearVsValues); } } } dateTime = _dateTime; } context.SaveChanges(); }
public void CollectTimeResults(sc2dsstatsContext context) { var resultvalues = context.DsTimeResultValues .Include(i => i.Opponents) .Include(i => i.Teammates) .ToList(); var results = context.DsTimeResults .Include(i => i.Opponents) .Include(i => i.Teammates) .ToList(); int i = 0; foreach (var resultvalue in resultvalues) { string monthstring = resultvalue.Gametime.ToString("yyyyMM"); string yearstring = resultvalue.Gametime.ToString("yyyy"); List <string> timestrings = new List <string>() { monthstring, yearstring }; foreach (var time in timestrings) { var result = results.SingleOrDefault(x => x.Timespan == time && x.Cmdr == resultvalue.Cmdr && x.Opp == String.Empty && x.Player == false); if (result == null) { result = new DsTimeResult() { Player = false, Timespan = time, Cmdr = resultvalue.Cmdr, Opp = String.Empty, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; results.Add(result); context.DsTimeResults.Add(result); } var vsresult = results.SingleOrDefault(x => x.Timespan == time && x.Cmdr == resultvalue.Cmdr && x.Opp == resultvalue.Opp && x.Player == false); if (vsresult == null) { vsresult = new DsTimeResult() { Player = false, Timespan = time, Cmdr = resultvalue.Cmdr, Opp = resultvalue.Opp, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; results.Add(vsresult); context.DsTimeResults.Add(vsresult); } List <DsTimeResult> timeresults = new List <DsTimeResult>() { result, vsresult }; if (resultvalue.Player) { var plresult = results.SingleOrDefault(x => x.Timespan == time && x.Cmdr == resultvalue.Cmdr && x.Opp == String.Empty && x.Player == true); if (plresult == null) { plresult = new DsTimeResult() { Player = true, Timespan = time, Cmdr = resultvalue.Cmdr, Opp = String.Empty, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; results.Add(plresult); context.DsTimeResults.Add(plresult); } timeresults.Add(plresult); var plvsresult = results.SingleOrDefault(x => x.Timespan == time && x.Cmdr == resultvalue.Cmdr && x.Opp == resultvalue.Opp && x.Player == true); if (plvsresult == null) { plvsresult = new DsTimeResult() { Player = true, Timespan = time, Cmdr = resultvalue.Cmdr, Opp = resultvalue.Opp, Teammates = new HashSet <DsParticipant>(), Opponents = new HashSet <DsParticipant>() }; results.Add(plvsresult); context.DsTimeResults.Add(plvsresult); } timeresults.Add(plvsresult); } foreach (var tresult in timeresults) { ApplyResultChanges(resultvalue, tresult); } } context.DsTimeResultValues.Remove(resultvalue); i++; if (i % 1000 == 0) { logger.LogInformation($"DsTimeResults collected: {i}/{resultvalues.Count}"); context.SaveChanges(); } } context.SaveChanges(); }