我有一个字符串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用于验证输入是数据时间,因此示例更清晰)
我收到消息(即使没有searchData):
Linq无法识别ParseExact方法。
答案 0 :(得分:6)
它试图将DateTime.ParseExact
编译成SQL,然后失败。您只需要定义一个变量并将值放入该变量,然后在查询中使用该变量:
if (!String.IsNullOrEmpty(searchDate))
{
DateTime dt = DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture);
bookings = bookings.Where(s => s.Date1 >= dt);
}
答案 1 :(得分:2)
这取决于变量db
是什么。如果它是LINQ to SQL DataContext或EF DBContext,则无法使用您在日期使用的方法;没有支持。见this。有一些SQL函数可以解决这个问题。
如果您想要日期的原始SQL支持,请使用EntityFunctions class,它可以让您进行日期比较。 CompareTo也不受支持,因此您必须使用传统的大于。
答案 2 :(得分:0)
您在第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);
}
答案 3 :(得分:0)
要以更简单的方式进行,请尝试以下方法:
bookings = bookings.ToList().Where(s => s.Date1.CompareTo( DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture)) >= 0);
首先将它放在一个列表中,这样它就不会将DateTime.ParseExact作为SQL语句,因为SQL中没有DateTime.ParseExact。
希望这有帮助