public Dictionary <Guid, List <Visit> > GetVisitsInPeriodForEachSlide(VisitsFilterOptions options) { return(GetVisitsInPeriod(options) .AsEnumerable() .GroupBy(v => v.SlideId) .ToDictionary(g => g.Key, g => g.ToList())); }
public IQueryable <Visit> GetVisitsInPeriod(VisitsFilterOptions options) { var filteredVisits = db.Visits.Where(v => v.CourseId == options.CourseId); if (options.PeriodStart != DateTime.MinValue || options.PeriodFinish < DateTime.Now.AddSeconds(-10)) { filteredVisits = filteredVisits.Where(v => options.PeriodStart <= v.Timestamp && v.Timestamp <= options.PeriodFinish); } if (options.SlidesIds != null) { filteredVisits = filteredVisits.Where(v => options.SlidesIds.Contains(v.SlideId)); } if (options.UserIds != null) { if (options.IsUserIdsSupplement) { filteredVisits = filteredVisits.Where(v => !options.UserIds.Contains(v.UserId)); } else { filteredVisits = filteredVisits.Where(v => options.UserIds.Contains(v.UserId)); } } return(filteredVisits); }
public IEnumerable <string> GetUsersVisitedAllSlides(VisitsFilterOptions options) { if (options.SlidesIds == null) { throw new ArgumentNullException(nameof(options.SlidesIds)); } var slidesCount = options.SlidesIds.Count(); return(GetVisitsInPeriod(options) .DistinctBy(v => Tuple.Create(v.UserId, v.SlideId)) .GroupBy(v => v.UserId) .Where(g => g.Count() == slidesCount) .Select(g => g.Key)); }
public async Task <List <string> > GetUsersVisitedAllSlides(VisitsFilterOptions options) { if (options.SlidesIds == null) { throw new ArgumentNullException(nameof(options.SlidesIds)); } var slidesCount = options.SlidesIds.Count; return(await GetVisitsInPeriod(options) .Select(v => new { v.UserId, v.SlideId }) .Distinct() .GroupBy(v => v.UserId) .Where(g => g.Count() == slidesCount) .Select(g => g.Key) .ToListAsync()); }
public IQueryable <Visit> GetVisitsInPeriod(VisitsFilterOptions options) { var filteredVisits = db.Visits.Where(v => options.PeriodStart <= v.Timestamp && v.Timestamp <= options.PeriodFinish); if (options.SlidesIds != null) { filteredVisits = filteredVisits.Where(v => options.SlidesIds.Contains(v.SlideId)); } if (options.UserIds != null) { if (options.IsUserIdsSupplement) { filteredVisits = filteredVisits.Where(v => !options.UserIds.Contains(v.UserId)); } else { filteredVisits = filteredVisits.Where(v => options.UserIds.Contains(v.UserId)); } } return(filteredVisits); }
public async Task <Dictionary <Guid, List <Visit> > > GetVisitsInPeriodForEachSlide(VisitsFilterOptions options) { return((await GetVisitsInPeriod(options) .ToListAsync()) .GroupBy(v => v.SlideId) .ToDictionary(g => g.Key, g => g.ToList())); }