public TeamDetailsInfo GetTeam(int teamId) { var matches = this.GetTeamMatches(teamId); var players = this.GetTeamPlayers(teamId); var query = this.Context.MatchesLineUp .Where(x => x.TeamId == teamId) .Select(x => new { x.TeamId, x.Team.Name, x.YellowCard, x.ManOfTheMatch }).AsEnumerable(); var team = query.GroupBy(x => new { x.TeamId, x.Name }, (key, gr) => new TeamDetailsInfo { Id = key.TeamId, Name = key.Name, YellowCards = gr.Count(y => y.YellowCard).ToString(), ManOfTheMatch = gr.Count(mm => mm.ManOfTheMatch).ToString(), BestGame = matches.OrderByDescending(i => MatchResultHelper.Diff(i.ScoreInfo, key.TeamId)) .ThenByDescending(i => i.ScoreInfo.Sum(g => g.FullTimeScore)).First(), Losses = matches.Count(i => MatchResultHelper.Diff(i.ScoreInfo, key.TeamId) < 0).ToString(), Draws = matches.Count(i => MatchResultHelper.Diff(i.ScoreInfo, key.TeamId) == 0).ToString(), Wins = matches.Count(i => MatchResultHelper.Diff(i.ScoreInfo, key.TeamId) > 0).ToString(), Goals = matches.Sum(m => m.ScoreInfo.First(x => x.TeamId == teamId).FullTimeScore).ToString(), Players = players }).Single(); return(team); }