#c# #.net #sql #datetime
#c# #.net #sql #дата и время
Вопрос:
У меня есть событие календаря с StartDateTime и EndDateTime. Эти события хранятся в виде записей в базе данных. Я хочу получить все события на определенную дату. Есть несколько сценариев, которые сразу приходят на ум.
Учитывая конкретную дату 12/01/2011, я хочу получить события, которые приходятся на 12/01/2011 (с 12:00: 00 до 11:59: 59 вечера).
Итак, мне нужно выбрать:
- События, дата начала и дата окончания которых попадают в диапазон 12/01/2011 12:00:00 утра и 12/01/2011 11:59:00 вечера
- События, которые распространяются на следующий день. То есть StartDateTime будет 12/01/2011 до 11:59:59 вечера, но EndDateTime когда-нибудь в будущем
- События, конечная дата которых приходится на 01.12.2011, но до 11:59:59 вечера, а начальная дата — до 01.12.2011 12:00:00 утра
- События, которые охватывают несколько дней. То есть 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
значение на atimestamp
(поскольку ваши данные, по-видимому, хранятся в данный момент), вам нужно будет сравнить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)
Вот визуальное представление запроса.