更清洁的方法来检查数据集中的数据表,然后删除/添加数据表

时间:2014-06-13 19:32:06

标签: vb.net datatable dataset

我所拥有的是100%运作,但是我想知道是否有更清洁,更有效或更高的可读性方式,或者如果逐一检查是要走的路。

If XMLDataSet.Tables.Contains(CabinetTable.TableName) Then
    XMLDataSet.Tables.Remove(CabinetTable.TableName)
    XMLDataSet.Tables.Add(CabinetTable)
Else
    XMLDataSet.Tables.Add(CabinetTable)
End If
If XMLDataSet.Tables.Contains(DocTypeTable.TableName) Then
    XMLDataSet.Tables.Remove(DocTypeTable.TableName)
    XMLDataSet.Tables.Add(DocTypeTable)
Else
    XMLDataSet.Tables.Add(DocTypeTable)
End If
If XMLDataSet.Tables.Contains(IndexTable.TableName) Then
    XMLDataSet.Tables.Remove(IndexTable.TableName)
    XMLDataSet.Tables.Add(IndexTable)
Else
    XMLDataSet.Tables.Add(IndexTable)
End If
If XMLDataSet.Tables.Contains(CabinetToTypeTable.TableName) Then
    XMLDataSet.Tables.Remove(CabinetToTypeTable.TableName)
    XMLDataSet.Tables.Add(CabinetToTypeTable)
Else
    XMLDataSet.Tables.Add(CabinetToTypeTable)
End If
If XMLDataSet.Tables.Contains(TypeToIndexTable.TableName) Then
    XMLDataSet.Tables.Remove(TypeToIndexTable.TableName)       
    XMLDataSet.Tables.Add(TypeToIndexTable)
Else        
    XMLDataSet.Tables.Add(TypeToIndexTable)
End If

我认为我可以做一个sub来做这个,比如:

Private Sub addRemoveDataTable(ByRef ds As DataSet, ByVal dt As DataTable)
    If ds.Tables.Contains(dt.TableName) Then
        ds.Tables.Remove(dt.TableName)
    End If     
    ds.Tables.Add(dt)
End Sub

但我仍然需要为每个DataTable调用它,所以我不认为它更有效率。


编辑:

我完全忘记了对数据表使用paramarray ......

Private Sub addRemoveDataTable(ByRef ds As DataSet, ByVal ParamArray dTable() As DataTable)
    For Each dt As DataTable In dTable
        If ds.Tables.Contains(dt.TableName) Then
            ds.Tables.Remove(dt.TableName)
        End If
        ds.Tables.Add(dt)
    Next
End Sub

然而For循环的每次迭代都只是调用了第一个选项中的一个集合,所以我仍然无法看到效率的大幅提升。但是这个选项更容易阅读,而且更灵活。

2 个答案:

答案 0 :(得分:2)

少代码? (使用For Each循环调用您的方法)

For Each t in XMLDataSet.Tables
    addRemoveDataTable(XMLDataSet,t)  
Next

...

Private addRemoveDataTableSub(ByRef ds As DataSet, ByVal dt As DataTable)
   If ds.Tables.Contains(dt.TableName) Then
      ds.Tables.Remove(dt.TableName)
   End If     
   ds.Tables.Add(dt)
End Sub

答案 1 :(得分:2)

根据您对扩展方法的看法,您可以向DataSet添加扩展方法。

Imports System.Runtime.CompilerServices

Module ExtensionMethods

    <Extension> Public Sub Replace(ByVal dataSet As DataSet, ByVal dataTable As DataTable)
        If dataSet.Tables.Contains(dataTable.TableName) Then
            dataSet.Tables.Remove(dataTable.TableName)
        End If
        dataSet.Tables.Add(dataTable)
    End Sub

End Module

然后你的代码就变成了:

XMLDataSet.Replace(CabinetTable)
XMLDataSet.Replace(DocTypeTable)
XMLDataSet.Replace(IndexTable)
'...