#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. Я приму ваш ответ, поскольку вы правы. Пожалуйста, посмотрите на вопрос еще раз, так как я собираюсь отредактировать его и проверить, правильна ли моя логика