используя MVFM модель WPF для составления расписания и размышлений на весь день, и я не могу понять три кавычки, чтобы получить условие перед добавлением. Я хочу добавить в хранилище, а затем в базу данных newHourUnit. Моя модель базы данных - у семестров может быть много групп, а у групп может быть много семестров и часовых единиц. HourUnits может иметь много групп и, конечно, много семестров (этот DBContext я уже определил). HourUnit имеет свойства StartTime и EndTime типа TimeSpan. Также свойство ClassId и LecturerId, SemesterId, GroupId и DayOfWeek. Я должен проверить из кода, можно ли добавить newHourUnit. Его нельзя добавить, когда в хранилище уже есть HourUnit с идентификатором Semester = newHourUnit.SemesterId, в котором StartTime и EndTime находятся в диапазоне newHourUnit.StartTime и newHourUnit.EndTime, у которых Id of DayOfWeek соответствует newHourUnitek (DayOff = Id = 1 - понедельник и т. Д. c ...), с ClassId, который соответствует newHourUnit.ClassId, и LecturerId, который соответствует newHourUnit.LecturerId. Подводя итог, например, пользователь хочет добавить урок в понедельник с 08:00 до 09:30 в SemesterOne, в GroupOne Classnumber 200 с лектором по имени Джон Льюис. Таким образом, эти цитаты должны сначала проверить, есть ли уже продолжающийся урок в понедельник 8: 00-9: 30 в указанном c семестре и указанной c группе, а затем глобально (во всех семестрах и всех группах), если есть другой HourUnit, который имеет ClassId или LecturerId уже есть в базе данных с указанным c временем и днем, потому что это будет означать, что этот класс и лектор заняты (лектор не может разделить или 2 или более уроков не могут быть запущены в одном номере класса).
Проверка, не перекрывается ли время (например, если в указанном c семестре уже есть 8: 00-9: 00 HourUnit). Я нашел это условие, но не знаю, как его применить, я новичок в базах данных - (StartA <= EndB) && (EndA> = StartB).
В коде, который я определил (если это имеет смысл) logi c, чтобы узнать, могу ли я добавить этот новыйHourUnit
public IEnumerable<HourUnit> Matching { get; set; }
Matching = await _hourUnitRepository.GetMatchingsAsync(newHourUnit.StartTime, newHourUnit.EndTime, newHourUnit.SemesterId, newHourUnit.DayOfWeek, newHourUnit.ClassId, newHourUnit.LecturerId)
if(Matching.Count == 0)
{
_hourUnitRepository.Add(newHourUnit);
_hourUnitRepository.SaveAsync().GetAwaiter().GetResult();
}
И в моем репозитории HourUnit:
public override async Task<HourUnit> GetMatchingsAsync(TimeSpan startTime, TimeSpan EndTime, int semesterId, int dayOfWeek, int classId, int lecturerId)
{
return await Context.HourUnits. ????
}
Моя модель HourUnit:
public class HourUnit
{
public HourUnit()
{
}
public int Id { get; set; }
[Column(TypeName = "time")]
public System.TimeSpan StartTime { get; set; }
[Column(TypeName = "time")]
public System.TimeSpan EndTime { get; set; }
public DayOfWeek DayOfWeek { get; set; }
public WeekType WeekType { get; set; }
public int GroupId { get; set; }
public Group Group { get; set; }
public int LecturerId { get; set; }
public Lecturer Lecturer { get; set; }
public int ClassId { get; set; }
public Class Class { get; set; }
public int SubjectId { get; set; }
public Subject Subject { get; set; }
public int SemesterId { get; set; }
public Semester Semester { get; set; }
}
Все реквизиты в HourUnits имеют тип INT в базе данных, кроме StartTime и EndTime, это тип TIME. Надеюсь, я описал это правильно, основная цель состоит в том, чтобы я сказал, что пользователь не может добавить HourUnit, когда в одно и то же время и в тот же день проводится текущий урок в указанный c Семестр, а затем, если класс или лектор не занят (глобально). во всех семестрах). Это сложно, и мне действительно нужно закончить sh мой семестр проекта. Заранее спасибо. Надеюсь, не пропустил ни одной важной информации.