コード例 #1
0
        private IQueryable <Match> FilterMatchView(IQueryable <Match> query, MatchViewFilter filter)
        {
            if (filter != null)
            {
                query = filter.FilterMatchView(query);
            }

            return(query);
        }
コード例 #2
0
        /**
         * Get all the played matches for every leagues
         */
        public async Task <List <ResultViewModel> > GetAll(MatchViewFilter filter)
        {
            var filteredMatchQuery = this.FilterMatchView(db.Matches, filter);

            // Getting all the played matches
            var matchQuery = getMatchResultViewModel(filteredMatchQuery);

            // Grouping the matches by local date
            int hourOffset = 0;

            if (filter != null && filter.HourOffset != null)
            {
                hourOffset = filter.HourOffset.Value;
            }

            var groupedMatches = matchQuery.GroupBy(m => DbFunctions.TruncateTime(DbFunctions.AddHours(m.Date, hourOffset))).ToList().Select(mq => mq).ToList();

            // we group by the league Id
            var leagueMatches = groupedMatches.Select(
                gm => gm.GroupBy(svg => svg.LeagueId)
                .Select(
                    lq => new LeagueResultViewModel
            {
                CountryId   = lq.FirstOrDefault().CountryId,
                CountryName = lq.FirstOrDefault().CountryName,
                SeasonId    = lq.FirstOrDefault().SeasonId,
                SeasonName  = lq.FirstOrDefault().SeasonName,
                Id          = lq.FirstOrDefault().LeagueId,
                Name        = lq.FirstOrDefault().LeagueName,
                Date        = lq.FirstOrDefault().Date,
                matches     = lq.ToList()
                              .OrderBy(mv => mv.homeTeamPlayer.PlayerName)
                              .ThenBy(mv => mv.homeTeamPlayer.TeamName)
                              .ThenBy(mv => mv.awayTeamPlayer.PlayerName)
                              .ThenBy(mv => mv.awayTeamPlayer.TeamName)
            }
                    )
                .OrderBy(l => l.Name).ToList()
                );

            // we group by the Season ID
            var seasonMatches = leagueMatches.Select(
                lm => lm.GroupBy(svg => svg.SeasonId)
                .Select(
                    lq => new SeasonResultViewModel
            {
                CountryId     = lq.FirstOrDefault().CountryId,
                CountryName   = lq.FirstOrDefault().CountryName,
                Id            = lq.FirstOrDefault().SeasonId,
                Name          = lq.FirstOrDefault().SeasonName,
                Date          = lq.FirstOrDefault().Date,
                leagueMatches = lq.ToList()
            }
                    )
                .OrderBy(l => l.Name).ToList()
                );


            // we group by the Country ID
            var countryMatches = seasonMatches.Select(
                sm => sm.GroupBy(svg => svg.CountryId)
                .Select(
                    lq => new CountryResultViewModel
            {
                Id            = lq.FirstOrDefault().CountryId,
                Name          = lq.FirstOrDefault().CountryName,
                Date          = lq.FirstOrDefault().Date,
                seasonMatches = lq.ToList()
            }
                    )
                .OrderBy(l => l.Name).ToList()
                );


            // Finnaly we group by the Date
            var resultView = countryMatches.Select(
                lq => new ResultViewModel
            {
                Date           = lq.FirstOrDefault().Date,
                countryMatches = lq.ToList()
            }
                )
                             .OrderByDescending(l => l.Date).ToList();

            return(await this.ReturnResult(resultView, filter));
        }
コード例 #3
0
 // Returning the list with limited result or not depending on the filter
 private async Task <List <ResultViewModel> > ReturnResult(List <ResultViewModel> resultView, MatchViewFilter filter)
 {
     if (filter != null && filter.LimitResult != null)
     {
         var result = resultView.Take(filter.LimitResult.Value);
         return(result.ToList());
     }
     else
     {
         return(resultView.ToList());
     }
 }