通过EF LINQ比较UTC中的DateTimeOffset?

5
我将尝试进行以下调用:
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字段是一个datetimeoffset类型。问题是,我99%确定,在SQL中不存在这样的等价物:CreateDateTime.UtcDateTime,因此必须在后端完成而不是在数据库中完成。我可以像这样将所有数据带到后端,然后进行比较:

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

但是这显然是一个不良的解决方案,会影响异步操作。那么在这里获取异步计数的选项有哪些呢?
1个回答

0

如果您想强制从数据库中获取的所有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


我看到了解释它的答案 - 不过我需要针对这个特定实例的,不是总体上的。 - VSO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接