在linq表达式中检查DateTime是否为null

时间:2016-04-20 12:54:03

标签: c# linq datetime

在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]
}

3 个答案:

答案 0 :(得分:2)

另一个选择是将PubDate声明为类Feed声明中的可空。

像这样:

class Feed {
  public DateTime? PubDate {get;set;}
  ...
}

这会将数据库中的真相暴露给数据访问层,并将空值检查提升一级。

请参阅:Nullable types in c#

答案 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);