日期:2014-05-18 浏览次数:21193 次
DataTable dtTarget = new DataTable(); List<string> lsKeys = new List<string>(); foreach (DataRow row in dsTempValue.Tables[1].Rows)//循环每行 { drTarget = dtTarget.NewRow(); string key = ""; foreach (DataColumn col in dsTempValue.Tables[1].Columns)//循环每列 { key += row[col.ColumnName].ToString(); drTarget[col.ColumnName] = row[col.ColumnName]; } if (!lsKeys.Contains(key))//判断是否已经有相同数据 { dtTarget.Rows.Add(drTarget); } lsKeys.Add(key); }
------解决方案--------------------
写SQL语句啊
select a.*,b.* from TableA left join TableB on a.相同的字段=b.相同的字段
就可以实现你要的效果了,你试试!
参考
------解决方案--------------------
说实话,不管你在两次循环里面作什么,都效率不高。
楼主想要的就是一个时间复杂度更低的方法吧。
using System; using System.Data; using System.Linq; namespace ConsoleApplication1 { internal class Program { private static void Main() { var dataTable = new DataTable(); dataTable.Columns.Add("A"); dataTable.Columns.Add("B"); dataTable.Columns.Add("C"); dataTable.Rows.Add("1", "2", "3"); dataTable.Rows.Add("1", "2", "4"); dataTable.Rows.Add("2", "2", "3"); dataTable.Rows.Add("5", "2", "1"); dataTable.AcceptChanges(); var dataTable2 = new DataTable(); dataTable2.Columns.Add("A"); dataTable2.Columns.Add("B"); dataTable2.Columns.Add("C"); dataTable2.Rows.Add("1", "2", "3"); dataTable2.Rows.Add("1", "2", "4"); dataTable2.Rows.Add("2", "2", "3"); dataTable2.Rows.Add("5", "2", "1"); dataTable2.AcceptChanges(); Console.WriteLine("A\tB\tC"); foreach ( DataRow dataRow in dataTable.AsEnumerable().Intersect(dataTable2.AsEnumerable(), DataRowComparer.Default)) { Console.WriteLine(dataRow[0] + "\t" + dataRow[1] + "\t" + dataRow[2]); } Console.R