【发布时间】:2016-06-11 15:49:22
【问题描述】:
我想知道是否可以在 Linq 查询 中转换 DateTime 对象的时区。例如
var seats = await _seat.GetAll()
.Where(
DbFunctions.AddHours( x.StartTime, -1 ) >= x.CreationTime.ToUniversalTime());
在上面的代码中,x.StartTime 是 UTC 时区,而 x.Creation 时间是 local 时区。如果我在 x.CreationTime 上调用 ToUniversalTime() 我会遇到异常。 是否可以在 Linq 查询中进行转换? 我知道可以在查询之前提取 CreationTime 并对其进行转换,但如果知道在 Linq qurt 中进行转换的可能性存在,那就太好了。
【问题讨论】:
-
你得到什么异常?
_seat.GetAll()是否从数据库中提取? -
您的代码中出现
DbFunctions表明您正在使用实体框架。真的吗?您的问题的答案将特定于将 LINQ 查询转换为 SQL 的 LINQ 提供程序。 -
几个问题:1)这是实体框架吗? 2) 这是 SQL Server 还是别的什么? (以及什么版本?) 3) 数据库中的
StartTime和CreationTime是什么字段类型? 4) 为什么您将本地时间存储在CreationTime字段中? 5) 谁的当地时间是 - 用户的?网络服务器的?数据库服务器的? 6) 你知道你的查询是non-sargable,对吧? -
@BJMyers 我收到此异常:** LINQ to Entities 无法识别方法 'System.DateTime ToUniversalTime()' 方法,并且此方法无法转换为商店表达式。 **
-
@MartinLiversage 正确,我使用的是实体框架。我不确定我是否理解您的意思:“您的问题的答案将特定于将 LINQ 查询转换为 SQ 的 LINQ 提供程序”