1

如何在 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上的错误。Birthdate=

我尝试使用以下代码,但返回一个转换异常(不能从字符串转换为 DateTime?)

Birthdate = (DateTime?)d["BirthDate"].ToString();

有没有办法快速检查空值?

4

3 回答 3

6

我没有对此进行测试,但您可以尝试以下方法:

Birthdate = d.Field<DateTime?>("BirthDate")

来自MSDN

Field 方法支持将列作为可空类型访问。如果 DataSet 中的基础值为 [DBNull.]Value,则返回的可为 null 类型将具有 null 值。

于 2012-07-09T02:00:22.673 回答
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();
于 2012-07-09T01:48:29.280 回答
0

使用上述代码时出现错误。我想我们可以使用下面的代码。

Birthdate = dr["BirthDate"] == DBNull.Value ? (DateTime?)null : (DateTime)dr["BirthDate"];

如果我们使用Convert.ToString(dr["BirthDate"]),那么它转换为空字符串,如果它有 DBNull。

也试试。

于 2012-07-09T02:25:59.777 回答