private HashSet <int> ValidateNoExemptYearsWithReportedPerformanceMeasureRow(int relevantPerformanceMeasureID)
        {
            var performanceMeasureActualSimples   = PerformanceMeasureActualSimples.Where(pma => pma.PerformanceMeasureID == relevantPerformanceMeasureID).ToList();
            var projectExemptReportingYearSimples = ProjectExemptReportingYearSimples ?? new List <ProjectExemptReportingYearSimple>();
            var exemptYears = projectExemptReportingYearSimples.Where(x => x.IsExempt).Select(x => x.CalendarYear).ToList();
            var performanceMeasureActualsWithExemptYear = performanceMeasureActualSimples.Where(x => exemptYears.Contains(x.CalendarYear)).ToList();

            return(new HashSet <int>(performanceMeasureActualsWithExemptYear.Select(x => x.PerformanceMeasureActualID.GetValueOrDefault())));
        }
        private HashSet <int> ValidateNoDuplicatePerformanceMeasureActualRow(int relevantPerformanceMeasureID)
        {
            if (PerformanceMeasureActualSimples == null)
            {
                return(new HashSet <int>());
            }
            var duplicates = PerformanceMeasureActualSimples
                             .Where(x => x.PerformanceMeasureID == relevantPerformanceMeasureID)
                             .GroupBy(x => new { x.PerformanceMeasureID, x.CalendarYear })
                             .Select(x => x.ToList())
                             .ToList()
                             .Select(x => x)
                             .Where(x => x.Select(m => m.PerformanceMeasureActualSubcategoryOptions).ToList().Select(z => String.Join("_", z.Select(s => s.PerformanceMeasureSubcategoryOptionID).ToList())).ToList().HasDuplicates()).ToList();

            return(new HashSet <int>(duplicates.SelectMany(x => x).ToList().Select(x => x.PerformanceMeasureActualID.GetValueOrDefault())));
        }
        private HashSet <int> ValidateNoIncompletePerformanceMeasureActualRow(int relevantPerformanceMeasureID)
        {
            if (PerformanceMeasureActualSimples == null)
            {
                return(new HashSet <int>());
            }

            var performanceMeasureIDs = PerformanceMeasureActualSimples.Select(x => x.PerformanceMeasureID.GetValueOrDefault()).Distinct();

            var performanceMeasuresIDsAndSubcategoryCounts =
                HttpRequestStorage.DatabaseEntities.PerformanceMeasures.Where(x =>
                                                                              performanceMeasureIDs.Contains(x.PerformanceMeasureID)).Select(x => new { x.PerformanceMeasureID, SubcategoryCount = x.PerformanceMeasureSubcategories.Count });

            var performanceMeasureActualsWithMissingSubcategoryOptions =
                PerformanceMeasureActualSimples.Where(
                    x => x.PerformanceMeasureID == relevantPerformanceMeasureID && (!x.ActualValue.HasValue || performanceMeasuresIDsAndSubcategoryCounts.Single(y => x.PerformanceMeasureID == y.PerformanceMeasureID).SubcategoryCount != x.PerformanceMeasureActualSubcategoryOptions.Count || x.PerformanceMeasureActualSubcategoryOptions.Any(y => y.PerformanceMeasureSubcategoryOptionID == null))).ToList();

            return(new HashSet <int>(performanceMeasureActualsWithMissingSubcategoryOptions.Select(x => x.PerformanceMeasureActualID.GetValueOrDefault())));
        }