【问题标题】:Comparison of DateTimeOffset in UTC via EF LINQ?通过 EF LINQ 比较 UTC 中的 DateTimeOffset?
【发布时间】:2016-03-04 20:12:25
【问题描述】:

我正在尝试拨打以下电话:

itemsCount = await _db.Disposals
                      .Include(d => d.ItemIds)
                      .Where(d => d.OrganizationId == SelectedOrganizationID &&
                                  d.CreateDateTime.UtcDateTime > greaterThanUtc &&
                                  d.CreateDateTime.UtcDateTime < lessThanUtc)
                      .SelectMany(d => d.ItemIds)
                      .CountAsync();

SQL CreateDateTime 字段是 SQL 中的 datetimeoffset 类型。我有 99% 的把握,这个问题是这样的:CreateDateTime.UtcDateTime 在 SQL 中不存在,所以它必须在后端完成,而不是在数据库中。我可以像这样将所有数据带到后端,然后进行比较:

itemsCount = _db.Disposals
                .Include(d => d.ItemIds)
                .AsEnumerable()

但这显然是一个糟糕的解决方案,并且会与异步混淆。我在这里有什么选择来异步获取计数?

【问题讨论】:

    标签: c# entity-framework linq


    【解决方案1】:

    如果您想强制将来自数据库的所有 DateTime 对象指定为 UTC,您需要添加一个 T4 转换文件并为所有 DateTime 和可为空的 DateTime 对象添加额外的逻辑,以便将它们初始化为 DateTimeKind。 UTC

    1) 为您的 .edmx 模型创建 .tt 文件

    2) 打开.tt文件,找到“WritePrimitiveTypeProperty”方法。

    3) 替换现有的 setter 代码。这是 ReportPropertyChanging 和 ReportPropertyChanged 方法回调之间的所有内容。

    以下是分步说明:

    http://www.aaroncoleman.net/post/2011/06/16/forcing-entity-framework-to-mark-datetime-fields-at-utc.aspx

    【讨论】:

    • 我在这里看到了解释这一点的答案 - 我需要它用于这个特定的实例,而不是整体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多