private GroupPlayerResult[] GetSortedSubArray( GroupPlayerResult[] results, int startIndex, int endIndex, ICollection <Match> matches ) { GroupPlayerResult[] controversialPlayerResults = new GroupPlayerResult[endIndex - startIndex + 1]; Array.Copy( results, startIndex, controversialPlayerResults, 0, controversialPlayerResults.Length ); User[] playersWithControversialResults = controversialPlayerResults.Select(r => r.Player).ToArray(); IEnumerable <int> playersWithControversialResultsIds = playersWithControversialResults.Select(p => p.Id); Match[] relatedMatches = matches.Where( m => playersWithControversialResultsIds.Contains(m.FirstPlayerId) && playersWithControversialResultsIds.Contains(m.SecondPlayerId) ).ToArray(); GroupPlayerResult[] sortedSubArray = GetSortedPlayersResults(playersWithControversialResults, relatedMatches); for (int i = 0; i < sortedSubArray.Length; i++) { GroupPlayerResult trueResult = controversialPlayerResults.Single(r => r.Player.Id == sortedSubArray[i].Player.Id); sortedSubArray[i].LoseGameCount = trueResult.LoseGameCount; sortedSubArray[i].LoseMatchesCount = trueResult.LoseMatchesCount; sortedSubArray[i].WinGamesCount = trueResult.WinGamesCount; sortedSubArray[i].WinMatchesCount = trueResult.WinMatchesCount; } return(sortedSubArray); }
private GroupPlayerResult[] GetPlayersResults(IList <User> players, ICollection <Match> matches) { GroupPlayerResult[] playerResults = new GroupPlayerResult[players.Count]; for (int i = 0; i < players.Count; i++) { playerResults[i] = new GroupPlayerResult { Player = players[i], WinMatchesCount = GetWinMatchesCount(matches, players[i].Id), LoseMatchesCount = GetLoseMatchesCount(matches, players[i].Id), WinGamesCount = GetWinGamesCount(matches, players[i].Id), LoseGameCount = GetLoseGamesCount(matches, players[i].Id) } } ; return(playerResults); }