我正在读回一个可以为空的DateTime?
属性,然后以短日期格式将该值分配给字符串属性。
我可以将日期时间值转换为短日期字符串并分配给IT_Date_String
属性。但是如果""
为空,我不确定如何为字符串分配IT_Date
值。
如何转换日期时间? datetime时为string.empty的值?是空的吗?
这是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; }
答案 0 :(得分:11)
无论IT_Date.Value.ToString(...)
是否确实有值,您都在调用IT_Date
。
所以你需要转动表达式:
r.IT_Date.HasValue ? r.IT_Date.Value.ToString(...) : ""
这种方式ToString()
只会在IT_Date
有值时调用。
您也可以在getter中实现此功能,如现已删除的评论中所述:
public string IT_Date_String
{
get
{
return IT_Date.HasValue ? IT_Date.Value.ToString(...) : "";
}
}
这样您就不必在访问此模型的任何地方重新实现逻辑,作为奖励,它只会在实际请求时执行。
还有no need to explicitly use String.Empty
, the string ""
will be interned to the same at runtime。
答案 1 :(得分:5)
在C#6中你可以这样做:
IT_Date_String = r.IT_Date?.ToString("yyyy-MM-dd") ?? String.Empty;
新的?
检查左边的东西是否为空,如果是,则表达式求值为null
。如果没有,它只是继续评估。
然后,??
检查第一个表达式的结果是null
,如果IT_Date
为空,它将是String.Empty
。如果是,请评估为{{1}}。
答案 2 :(得分:3)
使用C#6.0和null传播,您可以使用:
post('item_name');
答案 3 :(得分:1)
这个版本适用于任何版本的框架:
IT_Date_String=string.Format("{0:yyyy-MM-dd}",IT_Date);