当datetime为null时,如何将可为null的datetime值转换为字符串.empty

本文关键字:datetime null 转换 empty 字符串 | 更新日期: 2023-09-27 18:09:30

我正在读取一个可为null的DateTime?属性,然后将该值分配给短日期格式的字符串属性。

我可以将日期-时间值转换为短日期字符串并分配给IT_Date_String属性。但是,如果IT_Date为null,我不知道如何将""值分配给字符串。

如何转换日期时间?值为字符串。datetime时为空?为null?

这是linq:中的任务

var status_list = query_all.ToList().Select(r => new RelStatus
{
    IT_Date_String = r.IT_Date.Value.ToString("yyyy-MM-dd") != null ? r.IT_Date.Value : null
}).ToList();

以及模型中的属性:

public DateTime? IT_Date { get; set; }
public string IT_Date_String { get; set; }

当datetime为null时,如何将可为null的datetime值转换为字符串.empty

无论IT_Date是否真的有值,您都在调用IT_Date.Value.ToString(...)

所以你需要改变这个表达式:

r.IT_Date.HasValue ? r.IT_Date.Value.ToString(...) : ""

这样,只有当IT_Date具有值时才会调用ToString()

您也可以在getter中实现这一点,如一条现已删除的注释所述:

public string IT_Date_String 
{ 
    get
    {
        return IT_Date.HasValue ? IT_Date.Value.ToString(...) : "";
    }
}

这样,您就不必在访问该模型的任何地方重新实现逻辑,而且作为奖励,它只会在实际请求时执行。

也不需要显式使用String.Empty,字符串""将在运行时被插入到相同的字符串中。

在C#6中,您可以执行以下操作:

IT_Date_String = r.IT_Date?.ToString("yyyy-MM-dd") ?? String.Empty;

新的?检查左边的东西是否为null,如果为null,则表达式计算为null。如果没有,它只是继续评估。

然后,??检查第一个表达式的结果是否为null,如果IT_Date为空,则为。如果是,则评估为String.Empty

使用C#6.0和null传播,您可以使用:

IT_Date_String = r.IT_Date?.ToString("yyyy-MM-dd") ?? String.Empty

这个可以在任何版本的框架中工作:

IT_Date_String=string.Format("{0:yyyy-MM-dd}",IT_Date);