我有兩個數據表。 DataTable dtRequired和DataTable dtResult。2個數據表之間的區別
我想輸出一個數據表,其中包含dtResponse中沒有但在dtRequired中找到的行。
方法1 我們一直在使用在以下url http://weblogs.sqlteam.com/davidm/archive/2004/01/19/739.aspx指定的算法。 這個算法是我們分析中比較慢的算法之一。
方法2 所以,我試着用下面描述的東西來替換上面的算法。 dtRequired是索引在列我使用以下查找行。
if (dtResult.Rows.Count > 0)
{
lock (dtResult)
{
DataRow rowfound = null;
for (int i = 0; i < dtResult.Rows.Count; i++)
{
DataRow row = dtResult.Rows[i];
rowfound = dtRequired.Rows.Find(new object[] { row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8] });
if (rowfound != null)
{
dtRequired.Rows.Remove(rowfound);
}
}
}
}
上面片然而正在比方法1所花費的時間更長。 方法2對於1250行的dtResult需要〜3秒,dt需要4500行。
我上面提到的方法有問題嗎?有沒有更好的方法來實現這一目標?
如果我可能會問,爲什麼你要用dataTable做這個?這不能在後端完成嗎? – shahkalpesh 2009-06-26 05:58:44
否。源數據表用於形成發送到Web服務的壓縮數據結構。 Webservice相應地解釋這些數據,然後返回數據集。 – 2009-06-26 06:17:06
這兩個表是否有可以排序的唯一列?如果是這樣;您可以先對兩者進行排序,然後使用合併算法(請參見http://en.wikipedia。org/wiki/Merge_algorithm)將每個表當前行向前移動,同時將其排在另一個之後,將缺失的行插入到新表中。 – 2009-06-26 06:24:04