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