public static List <SubjectStats> GetSubjectsStats(int semester, int class_id, bool isZip) { List <SubjectVM> subjects = new List <SubjectVM>(); if (semester == 23) { List <SubjectVM>[] sb = new List <SubjectVM> [2]; sb[0] = DB.GetClassSubjects(class_id).Where(s => s.IsZip == isZip && s.Semester == 1).ToList(); sb[1] = DB.GetClassSubjects(class_id).Where(s => s.IsZip == isZip && s.Semester == 2).ToList(); List <int> ids = new List <int>(); for (int i = 0; i <= 1; i++) { foreach (var s in sb[i]) { if (!ids.Contains(s.Id)) { ids.Add(s.Id); subjects.Add(s); } } } } else { subjects = DB.GetClassSubjects(class_id).Where(s => s.IsZip == isZip && s.Semester == semester % 20).ToList(); } var studentsCount = StatsRepository.GetAllStudentsCount(class_id); var grades = StatsRepository.GetAllGrades(class_id, semester); List <SubjectStats> stats = new List <SubjectStats>(); List <int> checkedSubjects = new List <int>(); foreach (var s in subjects) { if (checkedSubjects.Contains(s.Id)) { continue; } else { checkedSubjects.Add(s.Id); } var subjectGrades = grades.Where(g => g.Subject_id == s.Id).ToList(); SubjectStats ss = new SubjectStats() { Subject = new SubjectVM() { Id = s.Id, Title = s.Title }, AllStudents = studentsCount, Grades = subjectGrades, StudentsWithGrades = subjectGrades.Count, Average = CalculateAverage(subjectGrades) }; stats.Add(ss); } return(stats); }