【问题标题】:AutoMapper - Convert UTC to Timezone with ProjectTo (IQueryable)AutoMapper - 使用 ProjectTo (IQueryable) 将 UTC 转换为时区
【发布时间】:2021-12-24 23:07:03
【问题描述】:

我试图找出一种使用自动映射器将所有系统日期 (UTC) 转换为用户时区的方法。我基本上在使用“ProjectTo”方法时遇到了问题,到目前为止,我已经尝试了以下无效的解决方案

  1. 使用 ITypeConverter 创建从 DateTime 到 DateTime 的映射
  2. 使用 IMemberValueResolver 的自定义实现

是否有任何解决方案或需要首先将 IQueryable 转换为 List

更新 #1

我要执行下面一行代码

TimeZoneInfo.ConvertTimeFromUtc(utc_date, some_timezone)

提前致谢。

TM

【问题讨论】:

标签: .net asp.net-mvc .net-core automapper


【解决方案1】:

是的,我认为您首先需要将IQueryable 转换为List。 AutoMapper 的 ProjectTo() 是 LINQ 的 Select() 的便捷包装器。它将映射配置转换为表达式,稍后由 ORM(如 Entity Framework 或 Dapper)转换为 SQL 查询。这就是为什么ProjectTo() 只支持 AutoMapper 的features 中的一小部分的原因。只有那些可以翻译成表达式的才会起作用。没有 ORM 会知道如何翻译:

TimeZoneInfo.ConvertTimeFromUtc(utc_date, some_timezone)

虽然有用于将偏移量应用于日期时间的 SQL 函数,例如 T-SQL 的 SWITCHOFFSET(更多内容见 docs),但我怀疑它是否适合您的需求,因为它应该与 AutoMapper 插件一起使用 -在。

我建议首先从数据库中获取数据,然后应用适当的时区偏移量。这种方法可以省去在数据库查询中调整时区的麻烦,并且可以直接访问用户时区,我认为这不是一个固定的常数。

【讨论】:

    猜你喜欢
    • 2020-06-16
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2021-03-12
    • 2020-03-21
    • 2021-08-01
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多