【问题标题】:Compare date in linq在 linq 中比较日期
【发布时间】:2014-10-22 21:23: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 保留为 dattime,因此示例更清晰)

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

Linq 无法识别 ParseExact 方法。

【问题讨论】:

  • “不断失败”是什么意思?
  • 错误消息会有所帮助,但我认为问题在于 EF 不知道如何将其转换为 SQL 命令。
  • 实体框架还是 LINQ to SQL?

标签: c# linq datetime datetime-comparison


【解决方案1】:

它试图将DateTime.ParseExact 编译成 SQL,但失败了。您只需定义一个变量并将值放入该变量中,然后在查询中使用该变量:

if (!String.IsNullOrEmpty(searchDate))
{
    DateTime dt = DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture);
    bookings = bookings.Where(s => s.Date1 >= dt);
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您在第 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);
      }
      

      【讨论】:

      • 无论如何也不会翻译成SQL。
      【解决方案4】:

      为了更简单,试试这个:

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

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

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2014-12-03
        • 2021-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-07
        • 2018-04-26
        • 2011-06-16
        相关资源
        最近更新 更多