3

我已经开始使用 Rob Conery 的 Massive。很棒的小“ORM”,性能非常好。但是,我在可空字段上遇到了 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 正在杀死我。如何可靠地检查可空属性是否不包含数据?

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 回答