【问题标题】:Search with date only仅搜索日期
【发布时间】:2014-08-04 12:04:09
【问题描述】:

我的数据库中有 issutime 表,其格式如下:

当我按确切的日期和时间执行搜索时,我会得到结果。但我想要的是仅使用日期执行搜索。例如:2014-02-28 应该返回该日期的所有结果。

这是我的代码:

var date = Convert.ToDateTime(search);
return View(db.newsletter.Where(x => x.issuetime == date).ToList());

有什么想法吗?

【问题讨论】:

    标签: c# asp.net-mvc datetime


    【解决方案1】:

    这类似于 Kosar 的方法,但更简单。它还应该正确处理一天中最后一秒发生的事件。

    var date = Convert.ToDateTime(search).Date;
    var nextDay = date.AddDays(1);
    return View(db.newsletter
        .Where(x => x.issuetime >= date && x.issuetime < nextDay)
        .ToList());
    

    Michael Dunlap 的方法适用于 LINQ-to-SQL,但 LINQ to Entities 似乎无法处理它。 Entity Framework 有 TruncateTime(参见 here,但 EntityFunctions 似乎已被弃用,所以我认为我不建议使用它。

    【讨论】:

      【解决方案2】:

      当您仅使用日期进行搜索时,它会将日期的时间戳更改为 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());
      

      【讨论】:

        【解决方案3】:

        使用 DateTime 类的 Date 属性。

        var date = Convert.ToDateTime(search);
        return View(db.newsletter.Where(x => x.issuetime.Date == date.Date).ToList());
        

        【讨论】:

        • @ŞenolŞahin:这适用于 LINQ to SQL。也许您应该在原始问题中包含有关您的 LINQ 提供程序(实体框架?)的信息。
        猜你喜欢
        • 1970-01-01
        • 2012-05-25
        • 2017-01-12
        • 1970-01-01
        • 2014-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-02
        相关资源
        最近更新 更多