c# - 正确使用DBNull

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

有人可以告诉我 DBNull 的正确使用方法吗?我正在开发一个 MVC3 项目,该项目在 Controller 中具有此查询。

我有一个 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”尚不存在的事实。我得到的只是该对象未设置为我知道的引用的异常。

我做错了什么?

最佳答案

如果序列为空,

FirstOrDefault 将返回引用类型的 null。这就是 qryGetBirthdate.Birthdate 处出现 NullRefernceException 的原因。因此检查它是否为空:

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

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

DateTime? firstBirthdate = (from c in db.Customer 
                             select c.Birthdate).FirstOrDefault();

关于c# - 正确使用DBNull,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18644868/

相关文章:

c# - 无法使 EF Code First 使用手动更改的数据库

asp.net-mvc - 如何在 asp.net mvc 3 中呈现部分 View ?

c# - 如何在非基于网络的应用程序中向 Google Analytics 发送请求

c# - Lambda 按参数排序性能

asp.net-mvc-3 - 如何在MVC3中使用超过2位小数格式化十进制

c# - linq 到 xml : read a xml config file

c# - 对 LINQ 语句进行逆向工程

c# - Lambda 表达式语法

javascript - 如何使用 selenium Web 驱动程序或使用 Javascript 防止页面重新加载?

c# - WPF:在工具箱中看不到我的自定义控件