比较林中的日期
本文关键字:日期 林中 比较 | 更新日期: 2023-09-27 18:27:40
我有一个字符串31-10-2014,我想与数据库中的值进行比较。
public ActionResult SearchResult(string searchDate)
{
var bookings = from m in db.Bookings
select m;
if (!String.IsNullOrEmpty(searchDate))
{
bookings = bookings.Where(s => s.Date1.CompareTo( DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture)) >= 0);
}
return View(bookings);
}
比较一直失败,我应该如何将输入日期与数据库值进行比较(我留下了验证输入为日期的try-catch,因此示例更清楚)
我收到消息(即使没有搜索数据):
Linq无法识别ParseExact方法。
它试图将DateTime.ParseExact
编译成SQL,但失败了。您只需要定义一个变量并将值放入该变量中,然后在查询中使用该变量:
if (!String.IsNullOrEmpty(searchDate))
{
DateTime dt = DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture);
bookings = bookings.Where(s => s.Date1 >= dt);
}
这取决于变量db
是什么。如果它是LINQ to SQL DataContext或EF DBContext,则不能使用当前使用的方法;没有人支持。看看这个。有一些SQL函数可以解决这个问题。
如果您希望对日期提供原始SQL支持,请使用EntityFunctions类,该类允许您进行日期比较。CompareTo也不受支持,因此您必须使用传统的大于。
在第7行的代码中有一个-
而不是=
。
这是正确的代码。
public ActionResult SearchResult(string searchDate)
{
var bookings = from m in db.Bookings
select m;
if (!String.IsNullOrEmpty(searchDate))
{
bookings = bookings.Where(s => s.Date1.CompareTo( DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture) >= 0);
}
return View(bookings);
}
要用更简单的方法,请尝试以下操作:
bookings = bookings.ToList().Where(s => s.Date1.CompareTo( DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture)) >= 0);
将它放在列表的第一位,这样它就不会将DateTime.ParseExact作为SQL语句,因为SQL中没有DateTime.ParseExact。
希望这能帮助