天天看點

取兩個DataTable的交集,删除重複資料

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

<code>/// &lt;summary&gt;</code>

<code>        </code><code>/// 取兩個DataTable的交集,删除重複資料</code>

<code>        </code><code>/// &lt;/summary&gt;</code>

<code>        </code><code>/// &lt;param name="sourceDataTable"&gt;源DataTable&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="targetDataTable"&gt;目标DataTable&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="primaryKey"&gt;兩個表的主鍵&lt;/param&gt;</code>

<code>        </code><code>/// &lt;returns&gt;合并後的表&lt;/returns&gt;</code>

<code>        </code><code>public</code>

<code>static</code> <code>DataTable Merge(DataTable sourceDataTable, DataTable targetDataTable,</code><code>string</code>

<code>primaryKey)</code>

<code>        </code><code>{</code>

<code>            </code><code>if</code>

<code>(sourceDataTable !=</code><code>null</code>

<code>|| targetDataTable !=</code><code>null</code>

<code>|| !sourceDataTable.Equals(targetDataTable))</code>

<code>            </code><code>{</code>

<code>                </code><code>sourceDataTable.PrimaryKey =</code><code>new</code>

<code>DataColumn[] { sourceDataTable.Columns[primaryKey] };</code>

<code>                </code><code>DataTable dt = targetDataTable.Copy();</code>

<code>                </code><code>foreach</code>

<code>(DataRow tRow</code><code>in</code>

<code>dt.Rows)</code>

<code>                </code><code>{</code>

<code>                    </code><code>//拒絕自上次調用 System.Data.DataRow.AcceptChanges() 以來對該行進行的所有更改。</code>

<code>                    </code><code>//因為行狀态為DataRowState.Deleted時無法通路ItemArray的值</code>

<code>                    </code><code>tRow.RejectChanges();</code>

<code>                    </code><code>//在加載資料時關閉通知、索引維護和限制。</code>

<code>                    </code><code>sourceDataTable.BeginLoadData();</code>

<code>                    </code><code>//查找和更新特定行。如果找不到任何比對行,則使用給定值建立新行。</code>

<code>                    </code><code>DataRow temp = sourceDataTable.LoadDataRow(tRow.ItemArray,</code><code>true</code><code>);</code>

<code>                    </code><code>sourceDataTable.EndLoadData();</code>

<code>                    </code><code>sourceDataTable.Rows.Remove(temp);</code>

<code>                </code><code>}</code>

<code>            </code><code>}</code>

<code>            </code><code>sourceDataTable.AcceptChanges();</code>

<code>            </code><code>return</code>

<code>sourceDataTable;</code>

<code>        </code><code>}</code>