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; }