使用linq比较部分日期

时间:2014-01-29 01:00:57

标签: c# linq

我需要使用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();

但它没有用,有什么想法吗?

感谢。

6 个答案:

答案 0 :(得分:0)

这应该有效:

_adRepository.Query.Where(p => p.DateModified.Day <= DateTime.Parse(updateDate).Day);

解析时可能会遇到一些问题,但我记不起它的正确格式了。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

试试这个:

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

答案 3 :(得分:0)

from q in _adRepository.Query
where DateTime.Compare(updateDate.Date, DateTime.Parse(q.DateModified).Date) <= 0
select q

答案 4 :(得分:0)

这适用于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);

答案 5 :(得分:0)

之前未提及的问题之一是您使用的测试数据始终无法返回值。 “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
}