private IQueryable <T> GetSlideCheckingsByUsers <T>(string courseId, Guid slideId, IEnumerable <string> userIds, bool noTracking = true) where T : AbstractSlideChecking { IQueryable <T> dbRef = db.Set <T>(); if (noTracking) { dbRef = dbRef.AsNoTracking(); } var items = dbRef.Where(c => c.CourseId == courseId && c.SlideId == slideId && userIds.Contains(c.UserId)); return(items); }
private IEnumerable <T> GetSlideCheckingsByUser <T>(string courseId, Guid slideId, string userId, bool noTracking = true) where T : AbstractSlideChecking { IQueryable <T> dbRef = db.Set <T>(); if (noTracking) { dbRef = dbRef.AsNoTracking(); } var items = dbRef.Where(c => c.CourseId == courseId && c.SlideId == slideId && c.UserId == userId).ToList(); return(items); }
public async Task RemoveWaitingManualCheckings <T>(string courseId, Guid slideId, string userId, bool startTransaction = true) where T : AbstractManualSlideChecking { using (var transaction = startTransaction ? db.Database.BeginTransaction() : null) { var checkings = GetSlideCheckingsByUser <T>(courseId, slideId, userId, noTracking: false) .AsEnumerable() .Where(c => !c.IsChecked && !c.IsLocked) .ToList(); foreach (var checking in checkings) { checking.PreRemove(db); db.Set <T>().Remove(checking); } await db.SaveChangesAsync().ConfigureAwait(false); transaction?.Commit(); } }