【问题标题】:Linq: Difference between 2 DateTimes in TimeSpanLinq:TimeSpan 中 2 个日期时间之间的差异
【发布时间】:2012-04-30 04:33:23
【问题描述】:

我正在尝试这样做:

Tickets.Where(t => (t.Date - myTicket.Date) < TimeSpan.FromSeconds(120));

我收到“DbArithmeticExpression 参数必须具有数字通用类型”错误。考虑到我需要 TimeSpan 的差异,我该怎么做?

提前致谢。

【问题讨论】:

  • 你在连接什么?这是 linq to SQL,EF,您是否希望这在内存中完成?编辑:注意到它有一个标签;不过,在问题的主体中提及一些重要的事情会很有帮助。

标签: c# linq linq-to-entities


【解决方案1】:

你会想使用SqlFunctions.DateDiff

Tickets.Where(t => 
      SqlFunctions.DateDiff("second", t.Date, myTicket.Date) < 120));

【讨论】:

  • 请告诉我,上面代码中“第二个”字的含义是什么,它是否返回天数......???请在回答中提及我...
  • @RahulChaudhari 它返回秒数,因此返回“秒”一词。如果你想要几天写“day”。
  • 参数切换?似乎“myTicket.Date”(较早的日期)应该在“t.Date”参数之前。
【解决方案2】:

你也可以用这个;

var result = db.Tickets.Where(t => 
       SqlMethods.DateDiffSecond(myTicket.Date ,  t.Date) < 120);

【讨论】:

    【解决方案3】:

    实体框架不支持带日期时间的算术。您必须使用SqlFunctions 之一。因此,对于您的陈述,类似于:

    Tickets.Where(t => 
          SqlFunctions.DateDiff("second", t.Date, myTicket.Date) < 120));
    

    【讨论】:

    • 很抱歉投了反对票。请稍微更改您的答案,然后我可以将其删除。
    猜你喜欢
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多