3

RobConeryのMassiveを使い始めました。素晴らしい小さな「ORM」と非常にパフォーマンスが良い。ただし、null許容フィールドでのSystem.DBNullの比較で問題が発生しています。

たとえば、プロパティが別のプロパティ(この例ではlong型)と一致するかどうかを確認したい

if (obj.MemberId == otherObj.MemberId) return true;

例外をスローします。演算子'=='は、タイプ'System.DBNull'および'long'のオペランドには適用できません。この場合、obj.MemberIdはnull(より具体的にはDBNull)でした。

さて、それがDBNull.Valueであるかどうかを最初に確認しますか?このような:

if (obj.MemberId != DBNull.Value)
    return obj.MemberId == otherObj.MemberId;

かっこいい、少なくともobj.MemberIdがDBNullである間は機能しますが、そうでない場合(longを含む)、別の例外:演算子'!='はタイプ'long'および'System.DBNull'のオペランドに適用できません

DBNullは私を殺しています。null許容プロパティにデータが含まれていないかどうかを確実に確認するにはどうすればよいですか?

4

4 に答える 4

6

is演算子を使用して試しましたか?

if (obj.MemberId is DBNull)
{
    // it is null
    return false;
}
else
{
    // has some value
    return obj.MemberId == otherObj.MemberId;
}
于 2011-04-09T13:18:35.983 に答える
1

使用Convert.IsDBNullするだけで十分です。

http://msdn.microsoft.com/en-us/library/system.convert.isdbnull(v=VS.90).aspx

于 2011-04-09T13:41:03.540 に答える
0
if (!DBNull.Value.Equals(obj.MemberID) && obj.MemberID !=null && obj !=null)

また

if (!DBNull.Value.Equals(obj) && obj.MemberID !=null && obj !=null)

あなたのケースに当てはまるものを選択してください。これにより、完全な証明チェックが得られます。

于 2011-04-09T13:18:49.047 に答える
0

これを試して。これは私にとってはうまくいきます。

string test = DBNull.Value.Equals(obj.Qty) ? string.Empty : obj.Qty.ToString();

于 2014-12-12T22:13:42.197 に答える