Получение списка встреч на сегодня, в прошлом и завтра

#c# #linq #datetime

Вопрос:

У меня есть проблема, когда дело доходит до отображения дат и времени в виде списка на странице просмотра моего приложения.

Пример:

  public IList<Appointment> GetTodaysAppointments()
    {
        DateTime today = DateTime.Now.Date;

        return db.Appointments
            .Where(e => e.StartDateTimeBooking == today)
            .Include(e => e.Patient) 
            .ThenInclude(p => p.User)
            .Include(e => e.Doctor) 
            .ThenInclude(d => d.User)
            .OrderBy(d => d.StartDateTimeBooking)
            .ToList();
    }
 

Это мой код, и чтобы сохранить повторяющийся код для получения завтрашних и прошлых встреч, это будет тот же прогноз для кода.

Я попытался реализовать оператор » Это отлично подходит для прошлых встреч и будет отображать только прошлые встречи и ничего больше.

Проблема: Когда я пытаюсь использовать»==», он не будет отображать сегодняшние встречи или какие-либо встречи. Однако, если я использую «>=», он покажет сегодняшние и предстоящие встречи. Это здорово, но мне это не нужно для завтрашних встреч. Я хочу, чтобы завтрашний день был отдельным.

Я заметил, что использую DateTime, в котором у меня есть даты со временем, сохраненные в моей переменной.

Я знаю, что если мне нужно записаться на сегодняшние встречи, я хочу сделать что-то вроде этого:

 StartDateTimeBooking >= YESTERDAY_MIDNIGHT amp;amp; StartDateTimeBooking <= TODAY_MIDNIGHT
 

Моя проблема в том, что мое время истекает через 24 часа. Какое уравнение или код мне нужно сегодня, чтобы гарантировать, что: Сегодняшние, прошлые и предстоящие встречи будут работать?

Я знаю, что я очень близок к решению, но любая помощь была бы очень признательна.

ОБНОВЛЕНИЕ: Верна ли эта логика?

Это дает мне список сегодняшних встреч:

  .Where(e => e.StartDateTimeBooking >= today amp;amp; e.StartDateTimeBooking < today.AddDays(1))
 

Это дает мне список встреч только на завтра:

 Where(e => e.StartDateTimeBooking > today.AddDays(1) amp;amp; e.StartDateTimeBooking < today.AddDays(2))
 

Это дает мне список предстоящих встреч

 .Where(e => e.StartDateTimeBooking >= today)
 

Это дает мне прошлые встречи:

 .Where(e => e.StartDateTimeBooking < today)
 

Ответ №1:

Поскольку даты включают время в базе данных, вам нужен промежуточный фильтр для вашей даты:

Предполагая, что сегодня-ваша переменная даты и представляет дату в полночь (например, время.Сегодня):

 .Where(e => e.StartDateTimeBooking >= today amp;amp; e.StartDateTimeBooking < today.AddDays(1))
 

Это создает фильтр между, который вам должен понадобиться. Сейчас полночь или позже, но до завтра в полночь (добавочные дни(1)).

Комментарии:

1. Да, у меня там был тест, чтобы записаться на прием на сегодня и завтра. На нем была указана только сегодняшняя встреча, что именно то, что я хотел сделать. Однако проблема, которую мне нужно решить, заключается в следующем: завтрашние встречи, предстоящие и встречи, а также прошлые встречи. Какие строки кода мне нужны для этого

2. Это другой вопрос, но переменная «сегодня» будет иметь другое значение

3. Я приму ваш ответ, поскольку вы правы. Пожалуйста, посмотрите на вопрос еще раз, так как я собираюсь отредактировать его и проверить, правильна ли моя логика