我需要使用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();
但它没有用,有什么想法吗?
感谢。
答案 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
}