我已经开始使用Rob Conery的“大块头”。很棒的小"ORM“和非常出色的表演。但是,我在可空字段的System.DBNull比较中遇到了问题。
例如,我想检查一个属性是否与另一个属性匹配(在本例中,是一个长类型)。
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要杀了我。如何可靠地检查可空属性是否不包含数据?
发布于 2011-04-09 05:18:35
你试过用is
操作符吗?
if (obj.MemberId is DBNull)
{
// it is null
return false;
}
else
{
// has some value
return obj.MemberId == otherObj.MemberId;
}
发布于 2011-04-09 05:41:03
仅仅使用Convert.IsDBNull
就可以了。
http://msdn.microsoft.com/en-us/library/system.convert.isdbnull(v=VS.90).aspx
发布于 2011-04-09 05:18:49
if (!DBNull.Value.Equals(obj.MemberID) && obj.MemberID !=null && obj !=null)
或
if (!DBNull.Value.Equals(obj) && obj.MemberID !=null && obj !=null)
选择任何适用于您的案例。这会给你一张完整的证明支票。
https://stackoverflow.com/questions/5605227
复制