我的视图模型有一个可为空的日期属性,例如...
[DataType(DataType.Date)]
public DateTime? SanctionExpires { get; set; }
但是当我尝试使用空值合并运算符时,比如...
var test = model.SanctionExpires.Value.ToUniversalTime() ?? model.SanctionExpires;
我遇到了以下错误...
运算符“??”无法应用于类型为“datetime”和“datetime”的操作数
我认为这应该可以工作,因为我将我的日期属性设置为可空,并且这篇文章也建议这样做。我做错了什么?
更新
为了更清楚地说明,我想使用null-coaslescing来分配一个Dapper参数,它将更新数据库中的DateTime字段。该字段可以接受空值或日期时间值。基本上,如果用户指定了日期,则将提供的日期分配给参数,否则将分配为null...
p.Add("@SanctionExpires", model.SanctionExpires.Value.ToUniversalTime() ?? model.SanctionExpires);
请注意,我必须进行UTC转换,因为我正在使用SQL Azure,它对日期使用UTC,否则如果我仅从我的本地系统传递数据,则时间会相差11小时(我在澳大利亚)。在SQL中,我使用一个函数将日期偏移到我的时区,然后再更新表格。
目前我用的解决方案如下,但不确定这是否是最简洁的方式。希望能够一行代码解决问题...
if (model.SanctionExpires == null)
p.Add("@SanctionExpires", model.SanctionExpires);
else
p.Add("@SanctionExpires", model.SanctionExpires.Value.ToUniversalTime());
SanctionExpires
是一个Nullable<DateTime>
,但是SanctionExpires.Value
是一个DateTime
。 - Dennis_Emodel.SanctionExpires
为null
时,您希望test
取什么值?(如果此代码编译,则会得到 NullReferenceException) - Hans Kesting