【发布时间】:2017-04-08 19:25:41
【问题描述】:
我的视图模型有一个可以为空的日期属性,例如...
[DataType(DataType.Date)]
public DateTime? SanctionExpires { get; set; }
但是当我尝试使用 null-coalescing 运算符时...
var test = model.SanctionExpires.Value.ToUniversalTime() ?? model.SanctionExpires;
我收到以下错误...
运算符'??'不能应用于“日期时间”类型的操作数和 '日期时间'
我认为这应该可以工作,因为我将 date 属性设置为可为空,this post 建议它也应该可以工作。我做错了什么?
更新
为了更清楚,我想使用 null-coaslescing 来分配一个 Dapper 参数,该参数将更新我数据库中的 DateTime 字段。该字段可以接受空值或日期时间值。基本上,如果用户指定日期,则将提供的日期分配给参数,否则分配 null...
p.Add("@SanctionExpires", model.SanctionExpires.Value.ToUniversalTime() ?? model.SanctionExpires);
请注意,我必须进行 UTC 转换,因为我使用的是使用 UTC 作为日期的 SQL Azure,否则如果我只是从本地系统传递数据,我的时间将超过 11 小时(我在澳大利亚)。在 sql 中,我使用一个函数在更新表之前将日期偏移到我的时区。
我目前的解决方案如下,但不确定这是否是最干净的方法。能排成一行就好了……
if (model.SanctionExpires == null)
p.Add("@SanctionExpires", model.SanctionExpires);
else
p.Add("@SanctionExpires", model.SanctionExpires.Value.ToUniversalTime());
【问题讨论】:
-
您的问题并不完全有道理。要尝试理解它(对我们和您而言),请尝试删除您的 var 并包含一个实际类型 - 您希望输出是什么?
-
SanctionExpires是Nullable<DateTime>,但SanctionExpires.Value是DateTime。 -
当
model.SanctionExpires是null时,您想要test的值是多少? (使用此代码(如果已编译)您会得到的是 NullReferenceException)
标签: c# asp.net-mvc datetime asp.net-core nullable