Как искать между двумя датами в LINQ to Entity?

У меня есть пример в SQL, как использовать ту же логику в Linq для Entity?

SELECT * FROM TABLE WHERE DATE BETWEEN STARTDATE AND ENDDATE 

Ответы

Ответ 1

Я предполагаю С#.

DateTime startDate=bla;
DateTime endDate=blabla;
using(var db=new MyDataContext())
{
    var filteredData=db.TABLE.Where(t => t.DATE > startDate && t.DATE < endDate);
    //...
}

Ответ 2

Вы хотите, чтобы он был включен в дату начала, но был исключен в дату окончания. Это связано с тем, что 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 с этой точной миллисекундой или нет. Технически вы не хотите включать 12am в эксклюзивную дату, но делайте это с включенной датой, как указано выше.

Ни одно из этого не будет применяться, если вы выбрали очень конкретные значения DateTime, которые содержат не только дату, но и время суток.