当字段可能为空时,如何将数据库编号转换为十六进制?

时间:2012-09-26 08:08:16

标签: c# linq hex

我无法将十进制转换为十六进制。

这是我的代码:

select new
{
    MessageID = table1.Field<Int32?>("MessageID"),
    MessageIDHex = (String)table1.Field<Int32>("MessageID").ToString("X")
}

它给了我错误

  

DBNUll.Value无法更改为System.In32

所以我试过了

MessageIDHex= (String)table1.Field<Int32?>("MessageID").ToString("X")} 

但它给了我另一个错误。

我该如何解决它,或者它有另一种解决方法。

1 个答案:

答案 0 :(得分:2)

显然,MessageID可以是DBNull。最简单的解决方案是将值读取为 nullable int(以防止发生转换错误)。如果您将Field与可空类型一起使用,则DBNull会自动转换为null,然后可以使用??运算符将其强制转换为0:

MessageIDHex = (table1.Field<Int32?>("MessageID") ?? 0).ToString("X")

或者,如果您愿意,可以将数据库结果中的DBNull值设为MessageIDHex的空字符串或空字符串:

MessageIDHex = table1.IsNull("MessageID") ? "" : table1.Field<Int32>("MessageID").ToString("X")
MessageIDHex = table1.IsNull("MessageID") ? null : table1.Field<Int32>("MessageID").ToString("X")