比较林中的日期

本文关键字:日期 林中 比较 | 更新日期: 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。

希望这能帮助