public async Task <ExamResult> DeleteExamResult(int id)
        {
            ExamResult er = _context.ExamResult.Find(id);

            if (er != null)
            {
                _context.ExamResult.Remove(er);
            }
            try
            {
                await _context.SaveChangesAsync();

                return(er);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public string GenerateExamResult(ResultGenerate resultGenerate)
        {
            var             exam          = _context.Exam.Where(e => e.Id == resultGenerate.ExamId).FirstOrDefault();
            List <ExamMark> examMarksList = new List <ExamMark>();


            Section section = _context.Section.Where(s => s.Id == resultGenerate.SectionId).FirstOrDefault();

            if (section != null)
            {
                List <Student> studentListInSession = _context.Student.Where(st => st.SectionId == section.Id).ToList();
                if (studentListInSession.Count() > 0)
                {
                    string isUpdateOrInsert = "";
                    foreach (Student studentInSection in studentListInSession)
                    {
                        List <ExamMark> examMarkListForStudent = _context.ExamMark.Where(em => em.ExamId == resultGenerate.ExamId &&
                                                                                         em.StudentId == studentInSection.Id).ToList();

                        ExamResult examResult = new ExamResult();
                        int        totalMark  = 0;
                        float      obtainMark = 0;
                        bool       isPassed   = true;
                        double     greadPoint = 0.00;

                        foreach (ExamMark mark in examMarkListForStudent)
                        {
                            var rotine = _context.ExamRoutine.Where(r => r.Id == mark.ExamRoutineId).FirstOrDefault();
                            totalMark  += rotine.TotalNumber;
                            obtainMark += mark.ObtainMark;
                            if (isPassed)
                            {
                                isPassed = mark.ResultStatus;
                            }
                            greadPoint += mark.Point;
                        }
                        examResult.ResultPublishDate = DateTime.Now;
                        examResult.TotalMark         = totalMark;
                        examResult.TotalObtainMark   = obtainMark;
                        examResult.ResultStatus      = isPassed;
                        examResult.Point             = Math.Round(greadPoint / examMarkListForStudent.Count(), 2);

                        ExamResultPoint resultPoint = getGradePoint(exam.BranchId, examResult.Point);

                        if (resultPoint != null)
                        {
                            if (examResult.ResultStatus)
                            {
                                examResult.Grade = resultPoint.Grade;
                            }
                            else
                            {
                                examResult.Grade = "F";
                            }
                            examResult.Note = resultPoint.Note;
                        }
                        else
                        {
                            examResult.Grade = "##";
                            examResult.Note  = "Point Setting Invalid";
                        }


                        examResult.TotalPresent = examMarkListForStudent.Count();

                        examResult.ExamId    = resultGenerate.ExamId;
                        examResult.SectionId = resultGenerate.SectionId;
                        examResult.StudentId = examMarkListForStudent[0].StudentId;


                        ExamResult existExamResult = _context.ExamResult.Where(ee => ee.ExamId == resultGenerate.ExamId &&
                                                                               ee.SectionId == resultGenerate.SectionId &&
                                                                               ee.StudentId == examMarkListForStudent[0].StudentId).FirstOrDefault();

                        if (existExamResult == null)
                        {
                            _context.ExamResult.Add(examResult);
                            _context.SaveChanges();
                            isUpdateOrInsert = "Inserted ";
                        }
                        else
                        {
                            existExamResult.TotalMark       = examResult.TotalMark;
                            existExamResult.TotalObtainMark = examResult.TotalObtainMark;
                            existExamResult.ResultStatus    = examResult.ResultStatus;
                            existExamResult.Point           = examResult.Point;
                            existExamResult.Grade           = examResult.Grade;
                            existExamResult.Note            = examResult.Note;
                            existExamResult.TotalPresent    = examResult.TotalPresent;

                            _context.ExamResult.Update(existExamResult);
                            _context.SaveChanges();

                            isUpdateOrInsert = "Updated ";
                        }
                    }

                    var resultList = _context.ExamResult.Where(er => er.ExamId == resultGenerate.ExamId &&
                                                               er.SectionId == resultGenerate.SectionId).ToList();

                    if (resultList.Count() > 0)
                    {
                        resultList.Sort((a, b) => a.TotalObtainMark.CompareTo(b.TotalObtainMark));
                        resultList.Reverse();
                        var highestscore = resultList[0].TotalObtainMark;
                        var position     = 0;
                        foreach (ExamResult er in resultList)
                        {
                            er.HighestMark = highestscore;
                            er.Position    = position + 1;
                            position       = (int)er.Position;
                        }
                        _context.ExamResult.UpdateRange(resultList);
                        _context.SaveChanges();

                        return("Successfully " + isUpdateOrInsert + resultList.Count() + " Result for Section :" + section.SectionName);
                    }
                    return(" Total " + studentListInSession.Count() + " student result " + isUpdateOrInsert + " but failed to Set height and position for students.");
                }
            }
            return("This Session not exist in branch.");
        }