Как надежно проверить, не содержит ли обнуляемое свойство никаких данных? DBNull убивает меня - PullRequest
3 голосов
/ 09 апреля 2011

Я начал использовать Massive, Роб Конери. Потрясающе маленький "ОРМ" и очень производительный. Однако у меня возникают проблемы со сравнениями System.DBNull в моих пустых полях.

Например, я хочу проверить, соответствует ли свойство другому свойству (в этом примере это длинный тип)

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

выдает исключение: Оператор '==' нельзя применить к операндам типа 'System.DBNull' и 'long' . В этом случае obj.MemberId был нулевым (точнее, DBNull).

Хорошо, поэтому я проверяю, является ли это DBNull.Value первым, верно? Как это:

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

Круто, это работает, по крайней мере, когда obj.MemberId является DBNull, но когда это не так (содержит long), другое исключение: Оператор '! =' Не может быть применен к операндам типа 'long' и ' System.DBNull '.

Д.Б.Налл убивает меня. Как надежно проверить, не содержит ли обнуляемое свойство никаких данных?

Ответы [ 4 ]

6 голосов
/ 09 апреля 2011

Вы пробовали с помощью оператора is?

if (obj.MemberId is DBNull)
{
    // it is null
    return false;
}
else
{
    // has some value
    return obj.MemberId == otherObj.MemberId;
}
1 голос
/ 09 апреля 2011

Просто с помощью Convert.IsDBNull следует сделать.

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

0 голосов
/ 13 декабря 2014

попробуйте это.это работает для меня;

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

0 голосов
/ 09 апреля 2011
if (!DBNull.Value.Equals(obj.MemberID) && obj.MemberID !=null && obj !=null)

или

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

Выберите все, что относится к вашему делу. Это даст вам полную проверку.

...