public ActionResult List()
        {
            InstructorListViewModel viewModel = new InstructorListViewModel();

            List <CourseRating> courseRatings = CourseRatingRepositorySQL.Instance.listByCategoryAndSemesters(
                Convert.ToInt32(GlobalVariables.CurrentCategory),
                (GlobalVariables.CurrentSemester == "-1" ? StaticData.semesters.Take(3).Select(y => y.semester).ToArray() : new[] { GlobalVariables.CurrentSemester }))
                                                .Where(p => p.classSize >= p.responses)
                                                .ToList();

            List <int> instructorIDs = courseRatings.Select(y => y.instructorID).Distinct().ToList();

            var    instructorList = StaticData.instructorList.Where(p => instructorIDs.Contains(p.instructorID));
            int    totalResponses = 0;
            int    totalStudents  = 0;
            double averageRating  = 0.0;

            List <InstructorDomain> instructors = instructorList.Select(p =>
            {
                var courseRatingsList = courseRatings.Where(x => x.instructorID == p.instructorID);
                var responses         = courseRatingsList.Select(y => y.responses).Sum(z => z);
                var students          = courseRatingsList.Select(y => y.classSize).Sum(z => z);
                var semesters         = courseRatingsList.Select(v => v.semester).Distinct()
                                        .OrderByDescending(t => t, new SemesterComparer());

                totalResponses += responses;
                totalStudents  += students;
                averageRating  += courseRatingsList
                                  .Sum(z => z.responses * z.ratings[0].averageRating);

                return(new InstructorDomain
                {
                    instructorID = p.instructorID,
                    firstName = p.firstName,
                    lastName = p.lastName,
                    lastSemester = (semesters.Count() > 0 ? semesters.FirstOrDefault() : ""),
                    rating = courseRatingsList
                             .Sum(z => ((double)z.responses / (double)responses) * z.ratings[0].averageRating).ToString("#.##"),
                    responses = responses.ToString(),
                    students = students.ToString(),
                    responseRate = ((double)responses / (double)students).ToString("p1")
                });
            }).Where(t => Convert.ToInt32(t.students) > 0).ToList();

            viewModel.instructors         = instructors;
            viewModel.totalResponses      = totalResponses.ToString("N0");
            viewModel.totalStudents       = totalStudents.ToString("N0");
            viewModel.averageResponseRate = ((double)totalResponses / (double)totalStudents).ToString("p1");
            viewModel.averageRating       = (averageRating / (double)totalResponses).ToString("#.##");
            viewModel.currentSemester     = (GlobalVariables.CurrentSemester == "-1" ? "the past three semesters" : GlobalVariables.CurrentSemester.Split(' ')[1] + " " + GlobalVariables.CurrentSemester.Split(' ')[0]);

            return(View(viewModel));
        }
예제 #2
0
        // GET: Instructor

        public ViewResult List(int page = 1)
        {
            InstructorListViewModel model = new InstructorListViewModel
            {
                Instructors = repository.Instructors
                              .OrderBy(p => p.Ins_id)
                              .Skip((page - 1) * PageSize)
                              .Take(PageSize),
                PagingInfo = new PagingInfo
                {
                    CurrentPage  = page,
                    ItemsPerPage = PageSize,
                    TotalItems   = repository.Instructors.Count()
                }
            };

            return(View(model));
        }