#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();