/// <summary> /// Gets the list of match dates for all completed matches. /// </summary> /// <returns>Returns the list of match dates for all completed matches.</returns> public List <DateTime> GetMatchDays() { var matchDates = MatchesPlayed.Where(m => m.MatchDate.HasValue).Select(m => m.MatchDate !.Value.Date).Distinct().ToList(); matchDates.Sort(); return(matchDates); }
/// <summary> /// Get the <see cref="RankingList"/> for the default upper date limit, which /// is the maximum match date. /// </summary> /// <param name="lastUpdatedOn">The date when the matches were last updated.</param> /// <returns>Get the <see cref="RankingList"/> for the default upper date limit, which is the maximum match date.</returns> public RankingList GetList(out DateTime lastUpdatedOn) { var upperDateLimit = MatchesPlayed.Count > 0 ? MatchesPlayed.Max(m => m.MatchDate ?? DateTime.MinValue) : MatchesToPlay.Max(m => m.MatchDate ?? DateTime.UtcNow); return(GetList(upperDateLimit, out lastUpdatedOn)); }
private RankingList GetUnsortedList(DateTime upperDateLimit, out DateTime lastUpdatedOn) { var teamIds = new HashSet <long>(); MatchesToPlay.ToList().ForEach(m => { teamIds.Add(m.HomeTeamId); teamIds.Add(m.GuestTeamId); }); MatchesPlayed.ToList().ForEach(m => { teamIds.Add(m.HomeTeamId); teamIds.Add(m.GuestTeamId); }); return(GetUnsortedList(teamIds, upperDateLimit, out lastUpdatedOn)); }
public override string ToString() { var matchScores = string.Join(",", MatchScores.Select(s => s.ToString()).ToArray()); var competitorsString = string.Join(",", PreviousCombatants.Where(s => !string.IsNullOrEmpty(s)).ToArray()); var strings = new List <string> { Genome, Score.ToString(), MatchesPlayed.ToString(), MatchesSurvived.ToString(), KilledAllDrones.ToString(), TotalDroneKills.ToString(), matchScores, competitorsString }; return(string.Join(";", strings.ToArray())); }
private RankingList GetUnsortedList(IEnumerable <long> teamIds, DateTime upperDateLimit, out DateTime lastUpdatedOn) { lastUpdatedOn = DateTime.UtcNow; if (MatchesPlayed.Any()) { lastUpdatedOn = MatchesPlayed .Where(m => teamIds.Contains(m.HomeTeamId) || teamIds.Contains(m.GuestTeamId)) .Max(m => m.ModifiedOn); } else if (MatchesToPlay.Any()) { lastUpdatedOn = MatchesToPlay .Where(m => teamIds.Contains(m.HomeTeamId) || teamIds.Contains(m.GuestTeamId)) .Max(m => m.ModifiedOn); } var rankingList = new RankingList { UpperDateLimit = upperDateLimit, LastUpdatedOn = lastUpdatedOn }; foreach (var teamId in teamIds) { var rank = new Rank { Number = -1, TeamId = teamId, MatchesPlayed = MatchesPlayed.Count(m => m.HomeTeamId == teamId || m.GuestTeamId == teamId), MatchesToPlay = MatchesToPlay.Count(m => m.HomeTeamId == teamId || m.GuestTeamId == teamId) }; // upperDateLimit contains the date part (without time), so the MatchDate must also be compared with the date part! foreach (var match in MatchesPlayed.Where(m => (m.HomeTeamId == teamId || m.GuestTeamId == teamId) && m.MatchDate.HasValue && m.MatchDate.Value.Date <= upperDateLimit.Date)) { if (match.HomeTeamId == teamId) { rank.MatchPoints.Home += match.HomeMatchPoints ?? 0; rank.MatchPoints.Guest += match.GuestMatchPoints ?? 0; rank.SetPoints.Home += match.HomeSetPoints ?? 0; rank.SetPoints.Guest += match.GuestSetPoints ?? 0; rank.BallPoints.Home += match.HomeBallPoints ?? 0; rank.BallPoints.Guest += match.GuestBallPoints ?? 0; rank.MatchesWonAndLost.Home += match.HomeMatchPoints > match.GuestMatchPoints ? 1 : 0; rank.MatchesWonAndLost.Guest += match.HomeMatchPoints < match.GuestMatchPoints ? 1 : 0; } else { rank.MatchPoints.Home += match.GuestMatchPoints ?? 0; rank.MatchPoints.Guest += match.HomeMatchPoints ?? 0; rank.SetPoints.Home += match.GuestSetPoints ?? 0; rank.SetPoints.Guest += match.HomeSetPoints ?? 0; rank.BallPoints.Home += match.GuestBallPoints ?? 0; rank.BallPoints.Guest += match.HomeBallPoints ?? 0; rank.MatchesWonAndLost.Home += match.HomeMatchPoints < match.GuestMatchPoints ? 1 : 0; rank.MatchesWonAndLost.Guest += match.HomeMatchPoints > match.GuestMatchPoints ? 1 : 0; } } rankingList.Add(rank); } return(rankingList); }