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 の選択で多くの時間が失われ、大幅に増加しています。選択には 5 つの一意の値があり、すべての値が互いに等しい場合は行をマージでき、日付は 1 つの期間にマージできます。

小さな例:

ID 開始日 終了日 値1 値2 値3

1 2012 年 11 月 11 日 2012 年 11 月 30 日 ABC マージに追加

2 2012 年 1 月 12 日 2012 年 12 月 31 日 ABC 1 とマージ

3 2013 年 1 月 1 日 2013 年 1 月 31 日 ABB マージに追加 (2 と同じ値ではありません)

どんな助けでも大歓迎です!敬具

4

0 に答える 0