可以使用DbFunctions.CreateDateTime脫光偏移,例如:
...
.Select(e => new MyClass {
MyDate = DbFunctions.CreateDateTime(e.MyDateTimeOffset.Year,
e.MyDateTimeOffset.Month,
e.MyDateTimeOffset.Day,
e.MyDateTimeOffset.Hour,
e.MyDateTimeOffset.Minute,
e.MyDateTimeOffset.Second)
...
正如你可能會懷疑,會帶來一些真正可怕的SQL,即:
convert (datetime2,right('000' + convert(varchar(255), DATEPART (year, [Extent1].[MyDateTimeOffset])), 4) + '-' + convert(varchar(255), DATEPART (month, [Extent1].[MyDateTimeOffset])) + '-' + convert(varchar(255), DATEPART (day, [Extent1].[MyDateTimeOffset])) + ' ' + convert(varchar(255), DATEPART (hour, [Extent1].[MyDateTimeOffset])) + ':' + convert(varchar(255), DATEPART (minute, [Extent1].[MyDateTimeOffset])) + ':' + str(CAST(DATEPART (second, [Extent1].[MyDateTimeOffset]) AS float), 10, 7), 121) AS [C2]
但它會給你你想要的。
一個警告是,這將完全剝離/忽略偏移量(如OP要求)。
來源
2017-09-23 15:58:53
RMD
'TruncateTime'有兩個重載'TruncateTime(Nullable)'和'TruncateTime(Nullable )' –
Eldho
它們都放棄了TIME。我想獲取DateTimeOffset的DateTime(包括日期和時間),沒有偏移量。如果無法獲取DateTimeOffset的DateTime部分,則支持該類型是完全沒有用的。 DateTimeOffset等同於UTC DateTime,它將DateTime與Offset分開。如果我無法查詢EF中DateTimeOffset的DateTime部分,它就毫無價值。像我說的,在普通的SQL中,它只是'cast(x as datetime)',其中x是一個DateTimeOffset字段。他們確實需要一個TruncateOffset函數。 – Triynko