在linq表达式中检查DateTime是否为空的方法是什么?我是IEnumeable方法,我从数据库中返回数据
return _requestRepository.ExecuteProcReader(
myRequest,
new SqlParameter("@userName", user)).Select(items => new Feed
{
Id = (int)items[0],
Title = items[1].ToString(),
Body = items[2].ToString(),
Link = items[3].ToString(),
PubDate = (DateTime) items[4]
});
item [4]是一个日期时间,在数据库中可以为null。那么,如何检查像
这样的东西if(items[4] is DateTime)
{
PubDate = (DateTime) items[4]
}
答案 0 :(得分:2)
另一个选择是将PubDate
声明为类Feed
声明中的可空。
像这样:
class Feed {
public DateTime? PubDate {get;set;}
...
}
这会将数据库中的真相暴露给数据访问层,并将空值检查提升一级。
答案 1 :(得分:0)
可能你可以在这里使用三元运算符。
return _requestRepository.ExecuteProcReader(myRequest,new SqlParameter("@userName", user)).Select(items => new Feed
{
Id = (int)items[0],
Title = items[1].ToString(),
Body = items[2].ToString(),
Link = items[3].ToString(),
PubDate = ((DateTime)items[4]).HasValue ? (DateTime) items[4] : DateTime.Now
//Or any date you want to use
});
答案 2 :(得分:0)
从数据库获取数据时,还应检查 DBNull.Value 。 这就是我要做的事情:
PubDate = (item[4] == null || item[4] == DBNull.Value ? DateTime.Now : (DateTime)item[4])
如果您在数据库中有多个可以为NULL的字段,则可以将其放在扩展方法中:
public static object GetDBValue(this object value, object defaultValue)
{
return value == null || value == DBNull.Value ? defaultValue : value;
}
并将其命名为:
PubDate = (DateTime)date1.GetDBValue(DateTime.Now);