public static IEnumerable<KeyValuePair<Guid, string>> GetBookedManikins(MedSimDbContext context, Course course) { var refStart = course.StartUtc; var refFinish = course.FinishCourseUtc(); return (from csm in context.CourseSlotManikins let c = csm.Course let lastDay = c.CourseDays.FirstOrDefault(cd => cd.Day == c.CourseFormat.DaysDuration) let cFinish = lastDay == null ? DbFunctions.AddMinutes(c.StartUtc, c.DurationMins) : DbFunctions.AddMinutes(lastDay.StartUtc, lastDay.DurationMins) where c.Id != course.Id && c.StartUtc < refFinish && refStart < cFinish select new { csm.ManikinId, c.CourseFormat.Description, c.Department.Abbreviation }) .ToKeyValuePairList(a => a.ManikinId, a => a.Abbreviation + '-' + a.Description); }