BusinessLogic.Logic.PlayedGames.PlayedGameRetriever.GetRecentPublicGames C# (CSharp) Method

GetRecentPublicGames() public method

public GetRecentPublicGames ( RecentlyPlayedGamesFilter filter ) : List
filter BusinessLogic.Models.PlayedGames.RecentlyPlayedGamesFilter
return List
        public List<PublicGameSummary> GetRecentPublicGames(RecentlyPlayedGamesFilter filter)
        {
            var query = dataContext.GetQueryable<PlayedGame>();


            if (filter.BoardGameGeekGameDefinitionId.HasValue)
            {
                query = query.Where(x => x.GameDefinition.BoardGameGeekGameDefinitionId == filter.BoardGameGeekGameDefinitionId);
            }

            var publicGameSummaries = (from playedGame in query group new PublicGameSummary
                 {
                     PlayedGameId = playedGame.Id,
                     GameDefinitionId = playedGame.GameDefinitionId,
                     GameDefinitionName = playedGame.GameDefinition.Name,
                     GamingGroupId = playedGame.GamingGroupId,
                     GamingGroupName = playedGame.GamingGroup.Name,
                     WinnerType = playedGame.WinnerType,
                     WinningPlayer = playedGame.PlayerGameResults.FirstOrDefault(player => player.GameRank == 1).Player,
                     DatePlayed = playedGame.DatePlayed,
                     ThumbnailImageUrl = playedGame.GameDefinition.BoardGameGeekGameDefinition == null
                                              ? null : playedGame.GameDefinition.BoardGameGeekGameDefinition.Thumbnail,
                     BoardGameGeekObjectId = playedGame.GameDefinition.BoardGameGeekGameDefinitionId
                 } 
                 by playedGame.GamingGroupId
                 into gamingGroups
                 select gamingGroups
                    .OrderByDescending(x => x.DatePlayed)
                    .ThenByDescending(y => y.PlayedGameId)
                    .FirstOrDefault()
                )
                    .OrderByDescending(x => x.DatePlayed)
                    .ThenByDescending(y => y.PlayedGameId)
                    .Take(filter.NumberOfGamesToRetrieve)
                    .ToList();

            foreach (var publicGameSummary in publicGameSummaries)
            {
                publicGameSummary.BoardGameGeekUri =
                    BoardGameGeekUriBuilder.BuildBoardGameGeekGameUri(publicGameSummary.BoardGameGeekObjectId);
            }
            return publicGameSummaries;
        }

Usage Example

        public void LocalFixtureSetUp()
        {
            using (NemeStatsDataContext dataContext = new NemeStatsDataContext())
            {
                var retriever = new PlayedGameRetriever(dataContext);

                var recentlyPlayedGamesFilter = new RecentlyPlayedGamesFilter
                {
                    NumberOfGamesToRetrieve = NUMBER_OF_GAMES_TO_RETRIEVE
                };
                publicGameSummaryResults = retriever.GetRecentPublicGames(recentlyPlayedGamesFilter);
            }
        }