【问题标题】:Compare a Part of the date using linq使用 linq 比较日期的一部分
【发布时间】:2014-01-29 01:00:56
【问题描述】:

我需要使用 LINQ 将日期字符串 "2010-06-11" 与数据库中的字段值 "2013-07-25 14:33:58.070" 进行比较,但只有年-月-日部分。

我试过了:

updateDate = "2010-06-11";

_adRepository.Query.Where(p => p.DateModified.ToString("YYYYMMDD") <= updateDate).FirstOrDefault();

但它不起作用,有什么想法吗?

谢谢。

【问题讨论】:

  • 有什么不好的?是否抛出异常?
  • 不能像那样比较字符串

标签: c# linq


【解决方案1】:

前面没有提到的问题之一是您使用的测试数据将始终无法返回值。 “2013-07-25”永远不会小于“2010-06-11”。

话虽如此,您的代码确实应该将 updateDate 变量转换为日期时间并与之进行比较,而不是转换表中的 DateModifed 字段。否则,转换将应用于数据库中的所有记录。我将使用的代码是:

var updateDateString = "2010-06-11";
DateTime updateDate;

if (DateTime.TryParse(updateDateString, out updateDate))
{
    _adRepository.Query.Where(p => p.DateModified <= updateDate).FirstOrDefault();
}
else
{
     // throw an exception or something
}

【讨论】:

    【解决方案2】:

    这应该可行:

    _adRepository.Query.Where(p =&gt; p.DateModified.Day &lt;= DateTime.Parse(updateDate).Day);

    解析可能有一些问题,但我不记得它的正确格式。

    【讨论】:

    • 嗨,谢谢,但我得到异常:抛出:“LINQ to Entities 无法识别方法 'System.DateTime Parse(System.String)' 方法,并且此方法无法转换为存储表达式。” (System.NotSupportedException)
    【解决方案3】:

    日期格式不正确。你想要“yyyyMMdd”。但这是试图让 linq 进行字符串比较。如果您使用的是 EF,它可能无法正常工作。

    将 UpdateDate 转换为 DateTime 并在您的查询中使用它。

    【讨论】:

      【解决方案4】:
      from q in _adRepository.Query
      where DateTime.Compare(updateDate.Date, DateTime.Parse(q.DateModified).Date) <= 0
      select q
      

      【讨论】:

        【解决方案5】:

        试试这个:

        DateTime updateDate = DateTime.Today;
        _adRepository.Query.Where(p => p.DateModified.Date <= updateDate).FirstOrDefault()
        

        【讨论】:

          【解决方案6】:

          这适用于 LinqPad

          DateTime[] update = new DateTime[]{ new DateTime(2014,01,01), new DateTime(2014,01,29), new DateTime(2014,01,22)};
          
          var selected = update.Where(x => x.Date <= new DateTime(2014,01,22).Date);
          

          【讨论】:

          • 您好,谢谢,但是如何将日期映射到我的 updateDate var?
          • 你的意思是这部分 {updateDate = "2010-06-11";} Datetime Update = Convert.ToDateTime(updateDate)... 从字符串中获取日期时间
          猜你喜欢
          • 1970-01-01
          • 2021-05-01
          • 2011-06-16
          • 1970-01-01
          • 2017-11-08
          • 2014-12-03
          • 1970-01-01
          • 1970-01-01
          • 2021-02-09
          相关资源
          最近更新 更多