1

标题可能很难理解,所以这里有一个简短的解释:我必须创建一个方法:

MergeDataset(byval ds as Dataset) 作为数据集

  • 数据表有多行
  • 列:startDate、endDate 和其他多个

数据集按 startDate 排序

我现在应该做什么 :

  • 我创建了一个数据集的克隆,当然它是空的
  • 我遍历数据表中的每个数据行

    如果数据行在克隆数据集中的值等于所有列(开始日期和结束日期除外)并且克隆的结束日期等于数据行的开始日期 - 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 2012 年 1 月 11 日 2012 年 11 月 30 日 ABC 添加到合并

2 2012 年 1 月 12 日 2012 年 12 月 31 日 ABC 与 1 合并

3 1-1-2013 31-1-2013 ABB 添加到合并(与 2 不同的值)

欢迎任何帮助!亲切的问候

4

0 回答 0