public async Task <IPagedList <LeaderBoardTeamNavigation> > GetAllLeaderBoardTeamNavigationPaginated(
            GetLeaderBoardTeamsPaginatedQuery query)
        {
            var teams = await GetTeamIncludeQueryable()
                        .Where(ToPredicate(query))
                        .Select(t => ToTeamLeaderBoardNavigation(t, query.TournamentIdFilter))
                        .ToListAsync();

            return(GetOrderByQuery(teams, query).FromEnumerable(query));
        }
 private static IEnumerable <LeaderBoardTeamNavigation> GetOrderByQuery(
     IEnumerable <LeaderBoardTeamNavigation> teamQuery,
     GetLeaderBoardTeamsPaginatedQuery paginationQuery)
 {
     if (paginationQuery.ScoreOrder == OrderEnum.Asc)
     {
         return(teamQuery.OrderBy(t => t.Score));
     }
     return(teamQuery.OrderByDescending(t => t.Score));
 }
 private static Expression <Func <Team, bool> > ToPredicate(GetLeaderBoardTeamsPaginatedQuery query)
 {
     return(team =>
            !team.IsDeleted &&
            (query.TournamentIdFilter == null || team.Participations.Any(p =>
                                                                         !p.Deactivated && !p.Tournament.IsDeleted && p.Tournament.IsPublished &&
                                                                         p.Tournament.Id == query.TournamentIdFilter)) &&
            (query.HasFinishedFilter == null || query.HasFinishedFilter.Value == team.Participations.Any(p =>
                                                                                                         !p.Deactivated &&
                                                                                                         p.EndDate != null &&
                                                                                                         p.Step.Id == p.Tournament.TournamentSteps.OrderByDescending(t => t.Order).First().StepId
                                                                                                         )));
 }