Запрос LINQ на временную метку между 22:30 и 1:00

#entity-framework #linq

#entity-framework #linq

Вопрос:

Я пытаюсь использовать LINQ для получения списка объектов, где временная метка находится между 22:30 — 24:00 или 00: 00 — 1:00 в субботу или воскресенье, и я хочу установить оба временных интервала в одном запросе LINQ, но я не смог этого сделать ипришлось разбить его следующим образом:

 weekdayNight = intervalInformations.Where(ii => ii.IntervalPeriodTimestamp.TimeOfDay >= new TimeSpan(22, 30, 0)
                                                     amp;amp; ii.IntervalPeriodTimestamp.TimeOfDay <= new TimeSpan(23, 30, 0)
                                                     amp;amp; ii.IntervalPeriodTimestamp.DayOfWeek != DayOfWeek.Saturday
                                                     amp;amp; ii.IntervalPeriodTimestamp.DayOfWeek != DayOfWeek.Sunday
                                                     amp;amp; !dates.Contains(ii.IntervalPeriodTimestamp.ToShortDateString()))
                                                     .OrderBy(ii => ii.IntervalPeriodTimestamp)
                                                     .ToList();


weekdayNight2 = intervalInformations.Where(ii => ii.IntervalPeriodTimestamp.TimeOfDay >= new TimeSpan(0, 0, 0)
                                                     amp;amp; ii.IntervalPeriodTimestamp.TimeOfDay <= new TimeSpan(0, 30, 0)
                                                     amp;amp; ii.IntervalPeriodTimestamp.DayOfWeek != DayOfWeek.Saturday
                                                     amp;amp; ii.IntervalPeriodTimestamp.DayOfWeek != DayOfWeek.Sunday
                                                     amp;amp; !dates.Contains(ii.IntervalPeriodTimestamp.ToShortDateString()))
                                                     .OrderBy(ii => ii.IntervalPeriodTimestamp)
                                                     .ToList();

weekdayNight.Add(weekdayNight2);
  

Как я могу написать этот запрос без необходимости объединения двух разных запросов

Ответ №1:

Добавление OR между двумя условиями, определяющими временные интервалы, должно помочь:

 weekdayNight = intervalInformations.Where(ii =>
    ((ii.IntervalPeriodTimestamp.TimeOfDay >= new TimeSpan(22, 30, 0) amp;amp; ii.IntervalPeriodTimestamp.TimeOfDay <= new TimeSpan(23, 30, 0))
||  (ii.IntervalPeriodTimestamp.TimeOfDay >= new TimeSpan(0, 0, 0) amp;amp; ii.IntervalPeriodTimestamp.TimeOfDay <= new TimeSpan(0, 30, 0)))
    amp;amp; ii.IntervalPeriodTimestamp.DayOfWeek != DayOfWeek.Saturday
    amp;amp; ii.IntervalPeriodTimestamp.DayOfWeek != DayOfWeek.Sunday
    amp;amp; !dates.Contains(ii.IntervalPeriodTimestamp.ToShortDateString())
)
.OrderBy(ii => ii.IntervalPeriodTimestamp)
.ToList();
  

Примечание: ваш запрос, похоже, исключает последние полчаса между 23:30 и полуночью. Если это не намеренно, вы можете упростить запрос еще больше:

 weekdayNight = intervalInformations.Where(ii =>
    (ii.IntervalPeriodTimestamp.TimeOfDay >= new TimeSpan(22, 30, 0)
||  ii.IntervalPeriodTimestamp.TimeOfDay <= new TimeSpan(0, 30, 0))
    amp;amp; ii.IntervalPeriodTimestamp.DayOfWeek != DayOfWeek.Saturday
    amp;amp; ii.IntervalPeriodTimestamp.DayOfWeek != DayOfWeek.Sunday
    amp;amp; !dates.Contains(ii.IntervalPeriodTimestamp.ToShortDateString())
)
.OrderBy(ii => ii.IntervalPeriodTimestamp)
.ToList();