有人可以告诉我DBNull的正确用法吗?我正在开发一个MVC3项目,它在控制器中有这个查询。
我有一个linq查询,它返回一个我知道在第一个循环中没有值的字段:
var qryGetBirthdate = (from c in db.Customer
select new
{
c.Birthdate
}
).FirstOrDefault();
在数据库中,Birthdate是Datetime类型,为null。
我为此做的检查是错误的:
if ( !DBNull.Value.Equals(qryGetBirthdate.Birthdate))
{
DateTime? dob = qryGetBirthdate.Birthdate;
}
我尝试过其他博客的变体但找不到答案。基本上我想要的是抓住'qryGetBirthdate.Birthdate'尚不存在的事实。我得到的只是对象没有设置为我知道的引用的例外。
我做错了什么?
答案 0 :(得分:6)
FirstOrDefault
返回null
作为引用类型。这就是NullRefernceException
qryGetBirthdate.Birthdate
的原因。所以检查它是否为空:
if(qryGetBirthdate != null)
{
// now you can access it safely
}
但是,您不需要创建匿名类型。
DateTime? firstBirthdate = (from c in db.Customer
select c.Birthdate).FirstOrDefault();
答案 1 :(得分:0)
如果BirthDate
是可以为空的Datetime SQL类型,那么c.Birthdate
应该是DateTime?
,在这种情况下您将使用:{/ p>
DateTime? dob = qryGetBirthdate.Birthdate;
答案 2 :(得分:0)
您是否尝试过以下操作?变量可能为null而不是dbnull。
if (qryGetBirthdate != null && qryGetBirthdate.BirthDate != null && !DBNull.Value.Equals(qryGetBirthdate.Birthdate))
{
DateTime? dob = qryGetBirthdate.Birthdate;
}