OjM*_*OjM 6 c# asp.net-mvc datetime nullable asp.net-core
我的视图模型具有可以为空的日期属性,例如...
[DataType(DataType.Date)]
public DateTime? SanctionExpires { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用null-coalescing运算符时......
var test = model.SanctionExpires.Value.ToUniversalTime() ?? model.SanctionExpires;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误...
算'''' 不能应用于'datetime'和'datetime'类型的操作数
我认为这应该工作,因为我将我的日期属性设置为可空,这篇文章表明它应该也可以工作.我究竟做错了什么?
UPDATE
为了更清晰,我想使用null-coaslescing来分配一个Dapper参数,该参数将更新数据库中的DateTime字段.该字段可以接受空值或日期时间值.基本上,如果用户指定日期,则将提供的日期分配给参数,否则指定null ...
p.Add("@SanctionExpires", model.SanctionExpires.Value.ToUniversalTime() ?? model.SanctionExpires);
Run Code Online (Sandbox Code Playgroud)
请注意,我必须进行UTC转换,因为我使用的是使用UTC作为日期的SQL Azure,否则如果我只是从本地系统传递数据,那么我的时间将超过11小时(我在澳大利亚).在sql中我使用函数在更新表之前将日期偏移到我的时区.
我目前的解决方案是让它工作,但不确定这是否是最干净的方式.能够排成一列真是太好了......
if (model.SanctionExpires == null)
p.Add("@SanctionExpires", model.SanctionExpires);
else
p.Add("@SanctionExpires", model.SanctionExpires.Value.ToUniversalTime());
Run Code Online (Sandbox Code Playgroud)
Pat*_*man 12
.Value在可空的上假设它不能为空.因此,对它使用null-coalescing运算符是无用的和禁止的.
您可以像这样使用运算符,但是继续使用您的代码我不确定这是否是您需要的:
DateTime test = (model.SanctionExpires ?? DateTime.Now).ToUniversalTime();
Run Code Online (Sandbox Code Playgroud)
对于您的更新:您可以像这样快捷地进行评估:
DateTime? test = model.SanctionExpires?.ToUniversalTime();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3362 次 |
| 最近记录: |