标题可能难以理解,所以这里有一个简短的解释: 我必须创建一个方法:
MergeDataset(byval ds as Dataset)作为数据集
数据集按startDate
排序我现在做的事情:
我循环遍历数据表中的每个数据行
如果数据行在克隆数据集中的值等于所有列(startdate和endate除外) 并且克隆的结束日期等于数据行的开始日期 - 1天
其他该行已添加到克隆
现在这已经正确完成,但需要花费很多时间。 当我有一个100 000行的数据集时,需要多个小时才能将它们全部合并。
这里有一些代码:
Dim mergeSet As DataSet = dsSubscriptions.Clone()
Dim dr() As DataRow = ds.Tables("resultTable").Select("","startDate")
For Each sourceRow As DataRow In dr
If mergeSet.Tables("resultTable").Rows.Count > 0 Then
Dim foundRows As DataRow() = mergeSet.Tables("resultTable").Select(endDate=startDate-1 and value1 = value1 and value2 = value2 and value3 = value3)
'If nothing in foundRows -> Add row
For Each resultrow As DataRow In foundRows
resultrow("endDate") = CDate(sourceRow("endDate"))
next
else
'Add row
Next
如果我检查时间跨度,那么很多时间会在mergeSet的选择中丢失。 select具有5个唯一值,如果所有值彼此相等,则可以合并行,并且日期可以合并为一个句点。
小例子:
id startDate endDate value1 value2 value3
1 1-11-2012 30-11-2012 A B C加入合并
2 1-12-2012 31-12-2012 A B C合并1
3 1-1-2013 31-1-2013 A B B添加到合并(与2的值不同)
欢迎任何帮助! 亲切的问候