大量数据时 用一个datatable中的某数据更新另一datatable效率问题
两个datatable都含有大量数据时 用一个datatable中的某数据更新另一datatable效率很慢 大家有什么办法显著的提高运行速度吗?代码如下,很简单的一个更新
datatable更新 datatable操作
/// <summary>
/// 根据员工ID和期间提取该员工五险一金数据,更新源DT
/// </summary>
/// <param name="SourceDT">源DT</param>
/// <param name="dtSS">五险一金DT</param>
protected static void UpdateDTSS(DataTable SourceDT, DataTable dtSS)
{
if (SourceDT.Rows.Count > 0)
{
for (int k = 0; k < SourceDT.Rows.Count; k++)
{
for (int j = 0; j < dtSS.Rows.Count; j++)
{
if (SourceDT.Rows[k]["EMPLOYEEID"].Equals(dtSS.Rows[j]["EMPLOYEEID"])
&& SourceDT.Rows[k]["ITEMNAME"].Equals(dtSS.Rows[j]["INSURANCETYPE"])
&& SourceDT.Rows[k]["Amount"].ToString() == "0")
{
//固定薪资项为0 则用社保数据更新
SourceDT.Rows[k]["Amount"] = dtSS.Rows[j]["RealPay"];
}
}
}
}
}
[解决办法]
你2个datatable数据那里来的?
更新之后再怎么操作呢?
[解决办法]
这个最好在数据库上用存储过程做。
如果在本地作,可以先对dtSS进行索引(如果EMPLOYEEID唯一就对它进行索引,如果EMPLOYEEID和INSURANCETYPE的联合唯一,则对联合进行索引(见下面例子):
protected static void UpdateDTSS(DataTable SourceDT, DataTable dtSS)
{
var dictionary = dtSS.Rows.OfType<DataRow>().ToDictionary(row => row["EMPLOYEEID"] + ":" + row["INSURANCETYPE"]);
foreach (DataRow row in SourceDT.Rows.OfType<DataRow>().Where(r => r["Amount"].ToString() == "0"))
{
string combinedKey = row["EMPLOYEEID"] + ":" + row["ITEMNAME"];
if (dictionary.ContainsKey(combinedKey))
{
row["Amount"] = dictionary[combinedKey]["RealPay"];
}
}
}