我从数据库查询某些字段,Planstartdate是datetime类型,并且Planstartdate可以为null,我想将Planstartdate格式化为“ yyyy-MM-dd”
DataTable dt = ds.Tables[0];
var query = dt.AsEnumerable()
.Select(dr =>
new InitOverview
{
IID = string.IsNullOrEmpty(dr.Field<string>("IID").ToString()) ? "" : dr.Field<string>("IID"),
ProjectName = string.IsNullOrEmpty(dr.Field<string>("ProjectName")) ? "" : dr.Field<string>("ProjectName"),
TeamLead = string.IsNullOrEmpty(dr.Field<string>("TeamLead")) ? "" : dr.Field<string>("TeamLead"),
Status = string.IsNullOrEmpty(dr.Field<string>("Status")) ? "" : dr.Field<string>("Status"),
OverallStatus = string.IsNullOrEmpty(dr.Field<string>("OverallStatus")) ? "" : dr.Field<string>("OverallStatus"),
Planstartdate = dr.Field<DateTime?>("Planstartdate"),
Planenddate = dr.Field<DateTime?>("Planenddate"),
Actualstartdate = dr.Field<DateTime?>("Actualstartdate"),
Actualenddate = dr.Field<DateTime?>("Actualenddate")
}
).ToList();
任何人都可以帮助实现它吗?
谢谢
最佳答案:
HasValue
using System;
public class Program
{
public static void Main()
{
DateTime? actualStartDate = DateTime.Now;
if(actualStartDate.HasValue)
{
string s = actualStartDate.Value.ToString("yyyy-MM-dd");
Console.WriteLine("value: " + s);
}
}
}
小提琴here。
如果要在对象初始化程序中执行此操作,则使用ternary operator看起来像这样:
new InitOverview
{
Planstartdate = dr.Field<DateTime?>("Planstartdate").HasValue
? dr.Field<DateTime?>("Planstartdate").Value.ToString("yyyy-MM-dd") : "no date";
}
小提琴here。
但是,我要提醒您,此时将其转换为字符串可能不是一个好主意。在代码中,通常应将日期保留为日期,直到实际需要向用户显示日期为止,因此应将其尽可能地延迟。实际上,只有在应用程序的视图层中,您才应该将日期转换为字符串。这样可以使API保持整洁(无需再次将其转换为日期来进行操作),并确保可以轻松地将其转换为正确的格式,以便根据其区域性设置向用户显示。
另外,您正在无聊地将数据库记录连接到.NET对象。这很乏味并且浪费时间。您应该使用诸如Dapper之类的微型ORM,并使其更加整洁。它可能是:
using (var connection = new SqlConnection(connectionString))
{
return connection.Query<InitOverview>(selectStatement).AsList();
}