2

有人可以告诉我正确使用 DBNull 吗?我正在开发一个 MVC3 项目,它在控制器中有这个查询。

我有一个 linq 查询,它返回一个我知道在第一个周期没有值的字段:

var qryGetBirthdate = (from c in db.Customer
                              select new
                                   {
                                      c.Birthdate
                                   }
                              ).FirstOrDefault();

在数据库中,Birthdate 是一个为空的 Datetime 类型。

我为此做的检查是错误的:

 if ( !DBNull.Value.Equals(qryGetBirthdate.Birthdate))
           {
               DateTime? dob = qryGetBirthdate.Birthdate;
           }

我尝试了其他博客的变体,但找不到答案。基本上我想要的是抓住'qryGetBirthdate.Birthdate'还不存在的事实。我得到的只是对象未设置为我知道的引用的异常。

我究竟做错了什么?

4

3 回答 3

6

FirstOrDefault如果序列为空,则返回null引用类型。NullRefernceException这就是at的原因qryGetBirthdate.Birthdate。所以检查它是否为空:

if(qryGetBirthdate != null)
{
    // now you can access it safely
}

但是,您不需要创建匿名类型。

DateTime? firstBirthdate = (from c in db.Customer 
                             select c.Birthdate).FirstOrDefault();
于 2013-09-05T20:01:17.843 回答
0

If BirthDate is a nullable Datetime SQL type then c.Birthdate should be a DateTime? in which case you would use:

DateTime? dob = qryGetBirthdate.Birthdate;
于 2013-09-05T20:03:01.660 回答
0

Have you tried the following. The variable is probably null and not dbnull.

 if (qryGetBirthdate != null && qryGetBirthdate.BirthDate != null && !DBNull.Value.Equals(qryGetBirthdate.Birthdate))
            {
                DateTime? dob = qryGetBirthdate.Birthdate;
            }
于 2013-09-05T20:04:58.523 回答