【问题标题】:How to format date variable in c# to match stored date in SQL database如何在 C# 中格式化日期变量以匹配 SQL 数据库中存储的日期
【发布时间】:2019-07-29 22:17:37
【问题描述】:

我正在将文本框中的日期读入 C# 程序,并将日期与 SQL 数据库中的条目进行比较。尽管日期的 SQL 查询显示该日期有条目,但我无法让它们匹配。

我尝试使用 .Date 保存到变量中,以尝试剥离 hh:mm:ss,但没有结果。我已经尝试DateTime.ParseExact 更改格式以匹配数据库。

if (!System.String.IsNullOrEmpty(searchDate))
{
      CultureInfo culture = new CultureInfo("en-US");
      DateTime completeDate = DateTime.ParseExact(searchDate, "M/d/yyyy", culture);
      requests = requests.Where(x => x.CompletionDate == completeDate);
}

当我搜索1/28/2019 时,我希望在数据库中找到两条记录的匹配项。我没有得到任何结果。我尝试了其他条目,也没有找到任何匹配项。没有生成错误消息。

【问题讨论】:

  • 您是否也将时间部分存储在数据库列 CompletionDate 中?
  • 是的,确实如此,它有 00:00:00.000 - 有没有办法将它添加到我的变量中或在比较两者时将其从数据库条目中删除?
  • 好的,但是有没有办法在访问数据库的 Razor 语句中执行它?
  • 为了确保不会因为时间部分而错过任何东西,我会使用 requests.Where(x => x.CompletionDate >= completeDate && x.CompletionDate
  • 您正在传递的示例searchDate 字符串是什么?如果您检查它,completeDate 的值是多少?您期望 LINQ 查询在数据库中找到的确切值是什么?

标签: c# sql razor


【解决方案1】:

如果您只是比较两个DateTime 对象,它们不仅会考虑日期,还会考虑时间。

要仅比较日期,您可以使用DateTime.Date 属性。

var date1 = new DateTime(2019, 7, 29, 15, 23, 44);
var date2 = new DateTime(2019, 7, 29);

Console.WriteLine(date1 == date2);
Console.WriteLine(date1.Date == date2.Date);

在这种情况下,第一个将返回false,第二个将返回true

【讨论】:

    【解决方案2】:

    问题是时间不是您比较的因素,也不应该包括在内。您只需要明确比较日期部分...

    requests = requests.Where(x => x.CompletionDate.Date == completeDate.Date);
    

    【讨论】:

      【解决方案3】:
      CultureInfo culture = new CultureInfo("en-US");
      
      DateTime completeDate = DateTime.ParseExact(searchDate, "M/d/yyyy", culture);
      
      completeDate = 1/28/2019 12:00:00 AM
      

      如果存储在 db 中的日期是 1/28/2019,它将不匹配。

      【讨论】:

        猜你喜欢
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-03
        • 2021-10-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多