16

NULLまたはブール(ビット)値を返すデータベースクエリがあります。

Nullable<bool>この値を C#の型の変数に格納したいと考えています。

例外がスローされずに単純な方法でこれを行う明示的なキャストと変換の許容可能な組み合わせを見つけることができないようです。

読みやすい1行で実行できますか?

編集:要求されたコード

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

多分

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

5 に答える 5

11

あなたがdatareader drを持っていると仮定します:

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

- -追加した - -

または多分あなたは??を使うことができます DBNullをチェックする必要はないが、コンパイラがこれを気に入るかどうかわからない場合(今はテストできません)

bool? tmp = dr["dbnullValue"] ?? (bool?) dr["dbnullValue"];
于 2013-01-30T17:31:17.293 に答える
6

あなたは書くことができますvalue as bool?。が type でない場合
に返されます。nullvaluebool

これはやや非効率的であることに注意してください。

于 2013-01-30T17:21:46.500 に答える
0
 while (reader.Read()) {
    bool? IsRestricted = (reader.IsDBNull(reader.GetOrdinal("IsRestricted"))) ? (null) : ((bool)reader.GetOrdinal("IsRestricted")));
 }
于 2013-01-30T19:59:39.413 に答える
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);
    }
于 2013-01-30T20:30:34.227 に答える