我发现我编写的大多数程序通常包含DataTables
,我经常通过选择DataRow
(通过循环或Linq)并通过以下方式确定我的变量值来从表中提取数据写下以下内容:
MyVar = ThisDataRow.Item("itm")
这非常有效,除非特定项目是DBNull
,在这种情况下它会引发错误。
现在,一个简单的解决方法是编写一个简单的函数/ if语句,如果项的值为0
,则返回值或""
或DBNull
,但我想知道如果以某种方式继承DataRow
对象并创建一个新属性ItemOrEmpty
(或任何你想要调用它),这将不会引发错误并返回正确的值。
这将允许我使用:
MyVar = ThisDataRow.Item("itm")
或
MyVar = ThisDataRow.ItemOrEmpty("itm")
取决于我是否要为Nulls
陷阱。
我的问题是:
DataRow
对象而不是创建一个新对象,但我不知道我不知道怎么做。DataRow.Item
的简单函数吗?基本上,这是一个相当理论上的问题 - 总体来说这是好还是坏?这怎么可能实现呢?
感谢!!!
答案 0 :(得分:1)
为了完整起见 - 对于任何来自这个问题的人 - 我最终做到这一点的方式是接受@Tim的建议并编写我自己的扩展方法。 请注意,这是我写过的第一篇,所以请告诉我是否有更好的方法来编写它。
''' <summary>
''' Returns the item from a DataRow and, if it is DBNull, it returns a specified default value
''' </summary>
''' <param name="ColumnName">The name of the Column in the datarow we want the value from.</param>
''' <param name="DefaultValue">The default value for that column if it is NULL.</param>
<System.Runtime.CompilerServices.Extension()> _
Public Function ItemOrEmpty(Of T)(ByVal dr As DataRow, ByVal ColumnName As String, ByVal DefaultValue As T) As T
If dr.Item(ColumnName) Is Nothing Or IsDBNull(dr.Item(ColumnName)) Then
Return DefaultValue
Else
Return dr.Item(ColumnName)
End If
End Function
希望这有助于其他人......