Как получить события календаря на определенную дату?

#c# #.net #sql #datetime

#c# #.net #sql #дата и время

Вопрос:

У меня есть событие календаря с StartDateTime и EndDateTime. Эти события хранятся в виде записей в базе данных. Я хочу получить все события на определенную дату. Есть несколько сценариев, которые сразу приходят на ум.

Учитывая конкретную дату 12/01/2011, я хочу получить события, которые приходятся на 12/01/2011 (с 12:00: 00 до 11:59: 59 вечера).

Итак, мне нужно выбрать:

  1. События, дата начала и дата окончания которых попадают в диапазон 12/01/2011 12:00:00 утра и 12/01/2011 11:59:00 вечера
  2. События, которые распространяются на следующий день. То есть StartDateTime будет 12/01/2011 до 11:59:59 вечера, но EndDateTime когда-нибудь в будущем
  3. События, конечная дата которых приходится на 01.12.2011, но до 11:59:59 вечера, а начальная дата — до 01.12.2011 12:00:00 утра
  4. События, которые охватывают несколько дней. То есть StartDateTime — до 12/01/2011 12:00:00 утра, а EndDateTime — после 12/01/2011 11:59:59 вечера

Возможно, мне не хватает других сценариев. У меня такое чувство, что это не оригинальная проблема, и есть методы, которые делают именно то, что мне нужно. Есть ли стандартный способ выбора этих событий?

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

1. Где и как представлены эти события? Из вашего вопроса неясно.

2. Эти события являются записями в таблице базы данных. Каждая запись имеет StartDateTime и EndDateTime, которые имеют тип datetime. Я пытаюсь запросить эти события с помощью LINQ

Ответ №1:

Я думаю, что ваши 4 случая сводятся к одному оператору (псевдокод)

 if ((StartDate <= InputDate) amp;amp; (EndDate >= InputDate))
 

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

1. Пожалуйста, обратите внимание, что если вы измените InputDate значение на a timestamp (поскольку ваши данные, по-видимому, хранятся в данный момент), вам нужно будет сравнить StartDate как меньшее, чем начало следующего дня, а затем EndDate с началом даты ввода . Сравнивая с date типами данных, это утверждение будет работать просто отлично.

Ответ №2:

После объединения решений, предложенных Джейсоном и X-Zero, вот что у меня получилось.

 DateTime inputDateStart = inputDate;
DateTime beginningOfNextDay = inputDate.AddDays(1);


IQueryable<MyEvent> inputDayEvents = (<collection of all the events here>)
.Where(e => e.StartDateTime < beginningOfNextDay amp;amp; e.EndDateTime >= inputDateStart)
 

Вот визуальное представление запроса.

введите описание изображения здесь