通过EF LINQ比较UTC中的DateTimeOffset?

时间:2016-03-04 20:12:26

标签: c# entity-framework linq

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

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()

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

1 个答案:

答案 0 :(得分:0)

如果要强制将来自数据库的所有DateTime对象指定为UTC,则需要添加T4转换文件并为所有DateTime和可为空的DateTime对象添加其他逻辑,以便将它们初始化为DateTimeKind.Utc

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

2)打开.tt文件,找到&#34; WritePrimitiveTypeProperty&#34;方法

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

以下是分步说明:

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