正确使用DBNull

时间:2013-09-05 19:57:57

标签: c# asp.net-mvc-3 linq sql-server-2008

有人可以告诉我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'尚不存在的事实。我得到的只是对象没有设置为我知道的引用的例外。

我做错了什么?

3 个答案:

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