【问题标题】:Using DateTime?.Value.TimeOfDay in LINQ Query在 LINQ 查询中使用 DateTime?.Value.TimeOfDay
【发布时间】:2012-04-17 12:35:32
【问题描述】:

我正在尝试在 ASP.NET MVC 3 上使用 LINQ 进行查询。

我有一个模型,我们称之为事件。此 Event 对象具有 DateTime? 的 Date 属性。我想要的是获取 2 个 TimeSpan 之间的事件。

现在我的代码如下所示:

TimeSpan From = new TimeSpan(8,0,0);
TimeSpan Until = new TimeSpan(22,0,0);

var events =
    from e in db.Events
    where e.Date.Value.TimeOfDay >= From,
          e.Date.Value.TimeOfDay <= Until
    select e;

抛出异常,告诉我“LINQ to Entities 不支持指定的类型成员 'TimeOfDay'。”

我无法解决这个问题,而且我整天都在尝试。请帮助我,我很沮丧。 :(

编辑:

我忘了在 e.Date.Value 之后在这里写“TimeOfDay”。无论如何,我在我的代码中做到了。

我不能使用 DateTime,因为我必须过滤在一天中的特定时间之间发生的事件,尽管事件的日期。

【问题讨论】:

  • 您的示例代码甚至没有使用TimeOfDay - 我假设实际上它使用了,而不是使用Date(根据您的代码)?
  • 为什么要使用两个 TimeSpan 对象而不是两个 DateTime 对象来过滤事件?

标签: sql-server asp.net-mvc linq entity-framework timespan


【解决方案1】:

使用Date and Time Canonical Functions for LINQ-to-Entities。具体看

CreateTime(hour, minute, second)

如果您在调用规范函数时需要帮助,请查看How To: Call Canonical Functions

【讨论】:

  • 这似乎在轨道上,我不知道Cannonical Functions。谢谢!但是,如何使用这些将 DateTime 转换为 Time?
  • @Umagon:使用datetime.Hourdatetime.Minutedatetime.Second
  • 天哪!这解决了我的问题!我想我爱你,哈哈。非常感谢! :D
  • @Umagon:我在别人身上创造了他们自己不理解的感觉。
  • 所以我可以像 context.MyTable.Where(entity => CreateTime(8, 0, 0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
相关资源
最近更新 更多