public ActionResult SubjectYearlyAverages(int studentId, int subjectId, int year) { double? tmpAvg = null; // semester avg double? markSemester1 = null; double? markSemester2 = null; double monthCount = 4; // semester = 1 (9, 10, 11, 12); semester = 2 (2, 3, 4, 5) List <object> subjectSemesterAverages = new List <object>(); var results = _resultService.GetResultsWithYear(studentId, subjectId, year, null); // if no results found if (results.Count() == 0) { tmpAvg = null; for (int i = 1; i <= 3; i++) { subjectSemesterAverages.Add(new { semesterIndex = i, average = tmpAvg }); } return(Ok(subjectSemesterAverages)); } // semester 1, 2 averages foreach (var r in results) { if (r.ResultDetails.Count(d => d.MonthlyAverage != null && d.ResultType.Coefficient == 1) == monthCount) { tmpAvg = _resultService.CalculateSubjectSemesterSum(r.ResultDetails); } else { tmpAvg = null; } // save to database r.Average = tmpAvg; _resultService.Update(); subjectSemesterAverages.Add(new { semesterIndex = r.Semester.Label, average = tmpAvg }); // if have only 1 result if (results.Count() == 1) { if (r.Semester.Label == 1) { tmpAvg = null; subjectSemesterAverages.Add(new { semesterIndex = 2, average = tmpAvg }); markSemester2 = tmpAvg; } else { tmpAvg = null; subjectSemesterAverages.Add(new { semesterIndex = 1, average = tmpAvg }); markSemester1 = tmpAvg; } } else { if (r.Semester.Label == 1) { markSemester1 = tmpAvg; } else { markSemester2 = tmpAvg; } } } // year average tmpAvg = _resultService.CalculateSubjectYearSum(markSemester1, markSemester2); subjectSemesterAverages.Add(new { semesterIndex = 3, average = tmpAvg }); return(Ok(subjectSemesterAverages)); }