我有兩個數據表dt1和dt2,我需要循環,並將dt1的兩列與dt2的相同兩列進行比較。我是Linq的初學者,但不確定使用Linq會更快嗎?請幫助:需要更快的解決方案,快速有效地循環兩個數據表?
每個DataTable有超過4500行和514列的數據,所以它是我們在這裏處理的一個大型數據集。
列位置「0」在兩個數據表中都有每行的唯一標識。我試圖比較列位置「6」中的數據,並將列位置「7」中的數據值從一個數據表中比較到另一個數據表中。
我的代碼在這裏需要大約10-15分鐘來處理。
什麼是最好的和更快的解決方案來比較從一個DataTable到另一個DataTable的兩列?
這裏是我的代碼
public void CompareDataTables(DataTable dt1, DataTable dt2)
{
foreach (DataRow row1 in dt1.Rows)
{
foreach (DataRow row2 in dt2.Rows)
{
var array1 = row1.ItemArray;
var array2 = row2.ItemArray;
if(row1[0].ToString() == row2[0].ToString())
{
if (row1[6].ToString() != row2[6].ToString())
{
tbCPDEResults.Text += "Project ID: " + row1[0] + " has a change in INV Approval Status. \nOld Value: " + row1[6] + " \nNew Value: " + row2[6] + "\n";
}
if (row1[7].ToString() != row2[7].ToString())
{
tbCPDEResults.Text += "Project ID: " + row1[0] + " has a change in INV Progress. \nOld Value: " + row1[7] + " \nNew Value: " + row2[7] + "\n";
}
}
}//inner foreach
}//outter foreach
}
感謝fellas的快速反應,我測試並最終使用@Jon所有交易建議的while循環解決方案它的作用就像一個魅力!它比我的foreach解決方案更高效,更快! :)如果兩個數據源是靜態的並且總是相同的模式,我肯定會在數據庫中這樣做。不幸的是,我必須分析sqlbulkcopy進入數據庫之前的數據集,因爲新列或刪除了列。不完全是最好的情況,但它是客戶想要的,並意識到風險。 – NewCsharper
pk1和pk2可能是字符串,因此它們不是順序int(1,2,3,4 ...等)。他們混合int和字符串/ varchar。有時候,一行將在表1中,但不在表2中,反之亦然。我有其他代碼來檢查新的或刪除的行,但我將如何修改上述答案來處理刪除或插入的行,其中pk是一個字符串? – NewCsharper
混合整數和字符串?伊克。那麼,上面的代碼也可以用於字符串,只需更改pk字段的類型並放棄解析。只要確保表格與您使用的比較運算符的排序規則相同即可。如果您想記錄一個表格中存在的記錄,但不記錄其他記錄,則可以將其添加到註釋顯示的位置。 – 2013-06-13 15:36:26