Как искать между двумя датами в LINQ to Entity? - PullRequest
24 голосов
/ 29 апреля 2010

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

SELECT * FROM TABLE WHERE DATE BETWEEN STARTDATE AND ENDDATE 

Ответы [ 2 ]

32 голосов
/ 29 апреля 2010

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

DateTime startDate=bla;
DateTime endDate=blabla;
using(var db=new MyDataContext())
{
    var filteredData=db.TABLE.Where(t => t.DATE > startDate && t.DATE < endDate);
    //...
}
10 голосов
/ 12 июня 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...