-1

我有一个字符串 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 保留为 dattime,因此示例更清楚)

我收到消息(即使没有 searchData):

Linq 无法识别 ParseExact 方法。

4

4 回答 4

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);
}
于 2014-10-22T21:33:21.530 回答
2

这取决于变量db是什么。如果它是 LINQ to SQL DataContext 或 EF DBContext,则不能使用当前使用的方法;没有支持。看到这个。有一些 SQL 函数可以解决这个问题。

如果您想要对日期的原始 SQL 支持,请使用EntityFunctions 类,它可以让您进行日期比较。也不支持 CompareTo,因此您必须使用传统的大于。

于 2014-10-22T21:32:25.157 回答
0

您在第 7 行的代码中有 a-而不是a 。=

这是正确的代码。

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);
}
于 2014-10-22T21:30:11.813 回答
0

要以更简单的方式进行操作,请尝试以下操作:

bookings = bookings.ToList().Where(s => s.Date1.CompareTo( DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture)) >= 0);

将它放在列表的第一位,这样它就不会将 DateTime.ParseExact 作为 SQL 语句,因为 SQL 中没有 DateTime.ParseExact。

希望这可以帮助

于 2014-10-23T05:17:31.573 回答