如何从两个不同的数据表中选择公共行

时间:2013-12-03 05:52:49

标签: c# datatable

我有两个从DB检索的数据表 - 每个只包含一列(nvarchar(50)) - 我想获得这些表中常见的所有行。我想将结果保存在新的dataTable中。我怎样才能做到这一点?非常感谢你。

`DataTable dt1 = new DataTable();
    DataTable dt2 = new DataTable();
    var FinalDataTable = new DataTable();`

FinalDataTable必须填充两个表中的公共行。

foreach(var rows in dt1.Rows) 试图使用

比较每一行

不确定它是如何工作的。

2 个答案:

答案 0 :(得分:2)

试试这个:

var result = from r1 in dt1.AsEnumerable()
             join r2 in dt2.AsEnumerable()
             on r1.Field<string>(0) equals r2.Field<string>(0)
             select r1;

var newDataTable = new DataTable();
newDataTable.Columns.Add("MyCol", typeof(string));
foreach (var item in result) {
    newDataTable.Rows.Add(item.ItemArray);
}

其中dt1dt2DataTable,其中包含一列字符串类型。

答案 1 :(得分:1)

 void matchColumn()
  {
    SqlDataAdapter da = new SqlDataAdapter("select * from images", "connectionString");

    DataTable DataTableA = new DataTable();
    da.Fill(DataTableA); // Fill the dataset

    SqlDataAdapter da2 = new SqlDataAdapter("select * from images", "connectionString");

    DataTable DataTableb = new DataTable();
    da.Fill(DataTableb); // Fill the dataset2
    int found = 0;
    for (int i = 0; i < DataTableA.Rows.Count; i++)
    {
      if (DataTableB.Rows[i][0] == DataTableA.Rows[i][0] && DataTableB.Rows[i][1] == DataTableA.Rows[i][1])
      {
        DataTableB.Rows[i]["Country"] = "Matched";
        found++;

        if (found >= 2)
        {
          //perform insertion
        }
      }
      else
      {
        DataTableB.Rows[i]["Country"] = "Not Matched";
      }
    }

  }

试试这个