public CompleteScoreboardSummary WithFilter(ScoreboardFilterInfo filter)
        {
            if (filter == null)
            {
                throw new ArgumentNullException(nameof(filter));
            }

            if (Filter.Division.HasValue && Filter.Division != filter.Division)
            {
                throw new ArgumentException("Cannot change an existing DivisionFilter.");
            }
            if (Filter.Tier.HasValue && Filter.Tier != filter.Tier)
            {
                throw new ArgumentException("Cannot change an existing TierFilter.");
            }
            IEnumerable <ScoreboardSummaryEntry> newTeamList = TeamList;

            if (filter.Division.HasValue)
            {
                newTeamList = newTeamList.Where(summary => summary.Division == filter.Division.Value);
            }
            if (filter.Tier.HasValue)
            {
                newTeamList = newTeamList.Where(summary => summary.Tier == filter.Tier.Value);
            }

            Filter   = filter;
            TeamList = newTeamList as IList <ScoreboardSummaryEntry> ?? newTeamList.ToList();
            return(this);
        }
        public ScoreboardFilterInfo WithAdditionalFiltering(ScoreboardFilterInfo addition)
        {
            var newFilter = new ScoreboardFilterInfo();

            if (addition.Division.HasValue && Division.HasValue && addition.Division.Value != Division.Value)
            {
                throw new ArgumentException("An existing filter parameter cannot be changed.");
            }
            newFilter.Division = addition.Division ?? Division;

            if (addition.Tier.HasValue && Tier.HasValue && addition.Tier.Value != Tier.Value)
            {
                throw new ArgumentException("An existing filter parameter cannot be changed.");
            }
            newFilter.Tier = addition.Tier ?? Tier;

            if (addition.Category.HasValue && Category.HasValue && addition.Category.Value != Category.Value)
            {
                throw new ArgumentException("An existing filter parameter cannot be changed.");
            }
            newFilter.Category = addition.Category ?? Category;

            if (addition.Location != null && Location != null && addition.Location != Location)
            {
                throw new ArgumentException("An existing filter parameter cannot be changed.");
            }
            newFilter.Location = addition.Location ?? Location;

            return(newFilter);
        }