У меня есть таблица issutime в моей базе данных и она имеет следующий формат:
Когда я выполняю поиск по точной дате и времени, я получаю результаты. Но я хочу выполнять поиск только с датой. Например: 2014-02-28 должен вернуть все результаты с этой датой.
Это мой код:
var date = Convert.ToDateTime(search);
return View(db.newsletter.Where(x => x.issuetime == date).ToList());
Есть идеи?
Это похоже на подход Косара, но проще. Он также должен правильно обрабатывать события, которые происходят в последнюю секунду дня.
var date = Convert.ToDateTime(search).Date;
var nextDay = date.AddDays(1);
return View(db.newsletter
.Where(x => x.issuetime >= date && x.issuetime < nextDay)
.ToList());
Подход Майкла Данлапа работал бы в LINQ-to-SQL, но LINQ to Entities, похоже, не справился с этим. Entity Framework имеет TruncateTime (см. Здесь, но EntityFunctions, похоже, устарел, поэтому я не думаю, что я бы посоветовал использовать его.
Когда вы выполняете поиск только с помощью даты, она изменяет отметку времени для даты на 00: 00: 00: 000. например, для 2014-02-28, он ищет 2014-02-28 00: 00: 00: 000, однако то, что вы ищете, - это все записи с равным выпуском, больше, чем 2014-02-28 00:00:00: 000 и менее 2014-02-29 00: 00: 00: 000. Вы можете попробовать что-то подобное, если решение Майкла не работает для вас.
var date1=DateTime.Parse(date + " " + "00:00:00 AM")
var date2=DateTime.Parse(date + " " + "11:59:59 PM")
return View(db.newsletter.Where(x => x.issuetime>= date1 && x.issuetime<= date2).ToList());
Используйте атрибут Date для класса DateTime.
var date = Convert.ToDateTime(search);
return View(db.newsletter.Where(x => x.issuetime.Date == date.Date).ToList());