日期:2014-05-18 浏览次数:21369 次
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