【问题标题】:entityframework can't return the records in database with datetime.now conditionentityframework 无法使用 datetime.now 条件返回数据库中的记录
【发布时间】:2016-09-21 05:48:30
【问题描述】:

我正在尝试使用此查询从数据库中返回一些记录:

        ViewBag.TrafficEnter = _iTrafficRepository.Get().Where(i => i.Type == "ورود" && i.SubmitDateTime == DateTime.Now).ToList();

在这里你可以看到我的数据库记录:

但问题是查询没有返回任何值。为什么?

【问题讨论】:

  • 您的查询也匹配时间..这就是为什么它没有返回任何内容..只比较日期。
  • 你需要把你的代码放在问题中,而不是它的图像。
  • @StephenMuecke 我做到了.tnx
  • @KartikeyaKhosla 你的意思是我在 datetime.now 的末尾添加了一个日期语句?例如 datetime.now.date?
  • 正如@KartikeyaKhosla 所指出的,您永远不会有任何与DateTime.Now 匹配的记录(如何在您调用此查询的确切毫秒内添加它们)-您是否想要创建DateTime.Today 的记录?跨度>

标签: c# asp.net-mvc entity-framework


【解决方案1】:

您将数据库中的 DateTime 值与返回当前时间(包括毫秒)的 DateTime.Now 值进行比较,并且永远无法匹配表中的任何值。

修改您的查询以选择范围内的值

var minDate = DateTime.Today; // returns today's with time component set to 00:00:00
var maxDate = minDate.AddDays(1);
ViewBag.TrafficEnter = _iTrafficRepository.Get()
    .Where(i => i.Type == "ورود" && i.SubmitDateTime >= minDate && i.SubmitDateTime < maxDate).ToList();

假设今天的日期是 2016 年 5 月 24 日,它将返回图像中显示的所有 17 条记录。

【讨论】:

    【解决方案2】:

    DateTime.Now 的问题在于它意味着一个非常小的日期范围,等于其精度的最小除法,在本例中为 1 毫秒。除非您的记录是使用与 DateTime 几乎完全相同的值创建的。现在您将永远找不到匹配项。

    您有两种解决方案(可能不适合您的需要);

    首先,不要匹配确切的日期时间,而是尝试匹配一个范围,例如DateTime.Now 之前/之后 1 小时。这将具有让您控制范围的优势。

    或者,您可以尝试将日期值 (DateTime.Now.Date) 与您的记录日期匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 2012-03-08
      相关资源
      最近更新 更多