Вы хотите, чтобы он включал дату начала, но эксклюзив дату окончания. Это потому, что DateTime
, использованное в качестве даты, действительно является началом этого дня и не распространяется на конец дня.
// dates that are inclusive on the date range
var startDate = new DateTime(2016, 1, 1);
var endDate = new DateTime(2016, 12, 31);
...
// WRONG: this will ignore data on the last day
.Where(obj => obj.StartDate >= startDate && obj.EndDate <= endDate)
// RIGHT: this will include the last day
var endDateExclusive = endDate.AddDays(1);
...
.Where(obj => obj.StartDate >= startDate && obj.EndDate < endDateExclusive)
Даже если вы используете конкретные значения DateTime
, все равно может быть важно использовать >=
и <
, а не >=
и <=
или >
и <
.
Если вы используете оба знака >=
и <=
, тогда два диапазона дат от X до Y и от Y до Z будут включать записи, точно совпадающие с Y. В зависимости от ваших требований это может быть серьезным недостатком запись в обоих диапазонах дат. Точно так же, если вы используете >
и <
, вы вместо этого исключите записей из обоих диапазонов дат, которые точно соответствуют Y.