如何检查Linq中的Null?
我有第三方代码,该代码返回DataTable
,其列类型DateTime
可以为空。
我的代码:
var profile = (from d in ds.Tables[0].AsEnumerable()
select new User
{
FirstName = d["FirstName"].ToString(),
Birthdate = Convert.ToDateTime(d["BirthDate"].ToString())
}).FirstOrDefault();
返回Object cannot be cast from DBNull to other types
语句{/ 1}}上的错误。
我尝试使用以下代码但返回强制转换异常(无法从字符串转换为DateTime?)
Birthdate=
有没有办法快速检查空值?
答案 0 :(得分:6)
我没有对此进行过测试,但您可以尝试以下方法:
Birthdate = d.Field<DateTime?>("BirthDate")
来自MSDN:
Field方法支持将列作为可空类型进行访问。如果DataSet中的基础值是[DBNull。] Value,则返回的可空类型的值将为null。
答案 1 :(得分:1)
您可以创建一个辅助函数来检查DBNull
的值,如下所示:
private static DateTime? ConvertNullableToDateTime(object val) {
return (val != null && val != DBNull.Value) ? Convert.ToDateTime(val.ToString()) : null;
}
现在您可以在LINQ查询中使用此方法:
var profile = (from d in ds.Tables[0].AsEnumerable()
select new User
{
FirstName = d["FirstName"].ToString(),
Birthdate = ConvertNullableToDateTime(d["BirthDate"])
}).FirstOrDefault();
答案 2 :(得分:0)
我使用上面的代码时出错了。我想我们可以使用下面的代码。
Birthdate = dr["BirthDate"] == DBNull.Value ? (DateTime?)null : (DateTime)dr["BirthDate"];
如果我们使用Convert.ToString(dr["BirthDate"])
,那么它转换为空字符串,如果它有DBNull。
也尝试一下。