Равная дата не отображается в поиске диапазона дат - PullRequest
0 голосов
/ 19 декабря 2018

Когда я устанавливаю дату окончания, например, 31.08.2018, не находит записи с датой 31 августа включительно, но они существуют в БД только до 30 августа включительно.Мне нужен дисплей даты с 31-м днем ​​месяца.

Дата в модели

//...
public Nullable<System.DateTime> dt_corr { get; set; }
//...

Контроллер

public ActionResult Index(DateTime? startdate, DateTime? enddate, int? page)
{
   var samp = from s in db.Samples
              select s;

   if (startdate != null)  // also tried startdate.HasValue 
   {
      samp = samp.Where(s => s.dt_corr >= startdate); //also tried startdate.Value 
      ViewBag.StartDate  = startdate;
   }
   if (enddate != null)// also tried enddate.HasValue
   {
      samp = samp.Where(s => s.dt_corr <= enddate); // also tried enddate.Value , no difference
      ViewBag.EndDate = enddate;  
      {
         int pageSize = 10;
         int pageNumber = (page ?? 1);
         return View(sampl.ToPagedList(pageNumber, pageSize));
      }

Просмотр

    //...
    @using (Html.BeginForm("Index", "Samples", FormMethod.Get))
    {
       <p>
          Date
          @Html.Label("StartDate", "Start Date:")
          <input class="startdate" id="startdate" name="startdate" type="date" value="">
          @Html.Label("EndDate", "Final Date:")
          <input class="enddate" id="enddate" name="enddate" type="date" value="">  // in the example class="startdate" too, no difference
          <input type="submit" value="Search"/>
      </p>
    }
    // ...
    Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of 
    @Model.PageCount

    @Html.PagedListPager(Model, page => Url.Action("Index",
        new { page, startdate = ViewBag.StartDate, enddate = ViewBag.EndDate }))

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Мы должны усечь Time из DateTime, когда мы хотим сравнить просто Date, поэтому вы можете использовать EntityFuctions.TruncateTime () метод, подобный этому:

 samp = samp.Where(s => EntityFunctions.TruncateTime(s.dt_corr) <= EntityFunctions.TruncateTime(enddate)); 

EntityFunctions помещено в System.Data.Objects пространство имен, поэтому добавьте using System.Data.Objects; в свой класс.

0 голосов
/ 19 декабря 2018

Когда вы используете «31 августа» в качестве конечной даты, вы действительно используете «31 августа, полночь» (0:00).Таким образом, вы пропустите почти всю эту дату - как вы нашли.

Простое решение: просто добавьте день и используйте < сравнение

вместо

samp = samp.Where(s => s.dt_corr <= enddate);

используйте

var realend = enddate.Value.AddDays(1);
samp = samp.Where(s => s.dt_corr < realend);
0 голосов
/ 19 декабря 2018

Кажется, что в вашей базе данных будет запись с dt_corr = "2018-08-31 12:33:32.130", и вы сравниваете с enddate = "2018-08-31 00:00:00.000".Так что эти записи не приходят.

Попробуйте, как показано ниже.

samp = samp.Where(s => s.dt_corr != null && s.dt_corr.Value.Date <= enddate.Value.Date);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...