我可以在一行中从DBNull转换为Nullable Bool吗?

时间:2013-01-30 17:20:22

标签: c# type-conversion nullable

我有一个数据库查询,它将返回NULL或布尔(位)值。

我希望将此值存储在C#中的Nullable<bool>类型的变量中。

我似乎无法找到一个可接受的explict强制转换和转换组合,它们以简单的方式执行此操作而不会抛出异常。

可以用一条可读行完成吗?

编辑:按要求编写代码

private Nullable<bool> IsRestricted;
...//data access
IsRestricted = (bool?)DataBinder.GetPropertyValue(dataObj, "IsRestricted");

或者

IsRestricted = (bool?)(bool)DataBinder.GetPropertyValue(dataObj, "IsRestricted");

5 个答案:

答案 0 :(得分:9)

假设你有一个datareader dr:

bool? tmp = Convert.IsDBNull(dr["dbnullValue"]) ? null: (bool?) dr["dbnullValue"];

---附加----

或者你可以使用??如果您不必检查DBNull但我不确定编译器是否会喜欢这个(我现在无法测试)

bool? tmp = dr["dbnullValue"] ?? (bool?) dr["dbnullValue"];

答案 1 :(得分:4)

你可以写value as bool? 如果null不属于value类型,则会返回bool

请注意this is somewhat inefficient

答案 2 :(得分:0)

 while (reader.Read()) {
    bool? IsRestricted = (reader.IsDBNull(reader.GetOrdinal("IsRestricted"))) ? (null) : ((bool)reader.GetOrdinal("IsRestricted")));
 }

答案 3 :(得分:0)

我对此问题使用扩展方法。

var isRestricted = dataRecord.GetNullableValue<bool>("IsRestricted");

有GetNullableValue方法的代码:

    public static Nullable<TValue> GetNullableValue<TValue>(
        this IDataRecord record, 
        string name) where TValue : struct
    {
        return record.GetValue<TValue, Nullable<TValue>>(name);
    }

还有一个简单的GetValue方法代码:

        private static TResult GetValue<TValue, TResult>(
        this IDataRecord record,
        string name)
    {
        var result = record[name];
        return !result.Equals(DBNull.Value) ? (TResult)result : default(TResult);
    }

答案 4 :(得分:0)

您可以执行以下操作

bool? myNullableBoolean = SqlConvert.ToType<bool?>(reader["myNullableBooleanColumn"]);