Beispiel #1
0
        public static List<Course> GetUsersRunningCourses(int userID, CourseUserRole roleID)
        {
            string key = String.Format("courses-userrunning-{0}-{1}", userID, roleID);
            List<Course> courses = (HttpContext.Current != null) ? HttpContext.Current.Cache[key] as List<Course> : null;

            bool ignoreCache = true;

            if (courses == null || ignoreCache) {

                DateTime targetStartDate = DateTime.Now.AddDays(7);
                DateTime targetEndDate = DateTime.Now.AddDays(-7);

                var courseQuery = new DidacheDb().Courses.AsQueryable();

                // all the roles
                if (roleID == CourseUserRole.All) {

                    courseQuery = courseQuery.Where(c => c.CourseUsers.Any(cu => cu.UserID == userID) &&
                                                        c.StartDate <= targetStartDate &&
                                                        c.EndDate >= targetEndDate);
                } else {
                    courseQuery = courseQuery.Where(c => c.CourseUsers.Any(cu => cu.UserID == userID &&
                                                        cu.RoleID == (int)roleID) &&
                                                        c.StartDate <= targetStartDate &&
                                                        c.EndDate >= targetEndDate);
                }

                courses = courseQuery
                    .Distinct()
                    .OrderByDescending(c => c.StartDate)
                    .ToList();

                if (roleID == CourseUserRole.Student)
                    courses = courses.Where(c => c.IsActive).ToList();

                HttpContext.Current.Cache.Add(key, courses, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 3, 0), CacheItemPriority.Default, null);
            }

            return courses;
        }