日期范围搜索中不显示等日期

时间:2018-12-19 06:53:52

标签: c# asp.net-mvc datetime

当我设置结束日期(例如31.08.2018)时,找不到包含8月31日(包括8月31日)的记录,但它们存在于数据库中(仅包括8月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 :(得分:1)

在您的数据库中似乎有一条记录为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);

答案 1 :(得分:1)

当我们只想比较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;添加到您的类中。

答案 2 :(得分:0)

当您使用“ aug 31st”作为结束日期时,您实际上是在使用“ aug 31st,midnight”(0:00)。因此,您会错过几乎所有的日期-如您所见。

简单的解决方案:只需添加一天并进行<比较

代替

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

使用

var realend = enddate.Value.AddDays(1);
samp = samp.Where(s => s.dt_corr < realend);