public IQueryable<StudentSchoolMetricInstance> GetStudentsWithMetrics(PriorYearStudentMetricsProviderQueryOptions providerQueryOptions)
        {
            var studentThatWillBeShown = ApplyQueryOptionsAndSecurity(schoolMetricStudentListRepository.GetAll(), providerQueryOptions);
            var query = from studentMetrics in studentSchoolMetricInstanceRepository.GetAll()
                        join esi in studentThatWillBeShown on new { studentMetrics.StudentUSI, studentMetrics.SchoolId, studentMetrics.SchoolYear } equals new { esi.StudentUSI, esi.SchoolId, esi.SchoolYear }
                        select studentMetrics;

            return FilterByMetrics(query, providerQueryOptions);
        }
        protected virtual IQueryable<SchoolMetricInstanceStudentList> ApplyQueryOptionsAndSecurity(IQueryable<SchoolMetricInstanceStudentList> query, PriorYearStudentMetricsProviderQueryOptions providerQueryOptions)
        {
            query = ApplySecurityFilter(query);
            query = ApplyLocalEducationAgencyIdAndSchoolIdFilter(query, providerQueryOptions);
            query = ApplySchoolMetricStudentListMetricIdFilter(query, providerQueryOptions);
            query = ApplyStudentIdsFilter(query, providerQueryOptions);

            return query;
        }
 public IQueryable<SchoolMetricInstanceStudentList> GetStudentList(PriorYearStudentMetricsProviderQueryOptions providerQueryOptions, MetadataColumn sortColumn = null, string sortDirection = "")
 {
     var query = ApplyQueryOptionsAndSecurity(schoolMetricStudentListRepository.GetAll(), providerQueryOptions);
     return query;
 }
        protected virtual IQueryable<StudentSchoolMetricInstance> FilterByMetrics(IQueryable<StudentSchoolMetricInstance> query, PriorYearStudentMetricsProviderQueryOptions providerQueryOptions)
        {
            if (providerQueryOptions.MetricVariantIds != null)
            {
                var enumerableMetricVariantIds = providerQueryOptions.MetricVariantIds as int[] ??
                                                 providerQueryOptions.MetricVariantIds.ToArray();

                var groupingIds = stateAssessmentMetricIdGroupingProvider.GetMetricVariantGroupIds();
                enumerableMetricVariantIds = enumerableMetricVariantIds.Concat(groupingIds).ToArray();

                if (enumerableMetricVariantIds.Any())
                    query = query.Where(metrics => enumerableMetricVariantIds.Contains(metrics.MetricId));
            }
            return query;
        }
        protected virtual IQueryable<SchoolMetricInstanceStudentList> ApplyStudentIdsFilter(IQueryable<SchoolMetricInstanceStudentList> query,
                                                        PriorYearStudentMetricsProviderQueryOptions providerQueryOptions)
        {
            if (providerQueryOptions.StudentIds == null)
                return query;

            var enumerableStudentIds = providerQueryOptions.StudentIds as long[] ??
                                       providerQueryOptions.StudentIds.ToArray();

            if (!enumerableStudentIds.Any())
                return query;

            return query.Where(metrics => enumerableStudentIds.Contains(metrics.StudentUSI));
        }
        protected virtual IQueryable<SchoolMetricInstanceStudentList> ApplySchoolMetricStudentListMetricIdFilter(IQueryable<SchoolMetricInstanceStudentList> query,
                                                                                PriorYearStudentMetricsProviderQueryOptions
                                                                                    providerQueryOptions)
        {
            if (!providerQueryOptions.SchoolMetricStudentListMetricId.HasValue)
                return query;

            return query.Where(student => student.SchoolYear == providerQueryOptions.Year &&
                                            student.MetricId == providerQueryOptions.SchoolMetricStudentListMetricId);
        }
 protected virtual IQueryable<SchoolMetricInstanceStudentList> ApplyLocalEducationAgencyIdAndSchoolIdFilter(IQueryable<SchoolMetricInstanceStudentList> query,
                                                                 PriorYearStudentMetricsProviderQueryOptions providerQueryOptions)
 {
     if (providerQueryOptions.LocalEducationAgencyId.HasValue)
     {
         return query.Where(student => student.SchoolId.ToString().StartsWith(providerQueryOptions.LocalEducationAgencyId.Value.ToString()));
     }
     return query.Where(student => student.SchoolId == providerQueryOptions.SchoolId);
 }