繁体   English   中英

如何比较两个具有不同列数的DataTable?

[英]How to compare two DataTable with different number of columns?

如果我想比较两个数据表并获得新数据表的差异,但我想保留一个未比较的列。 例:

第一个数据表

Name | Number
---- |-------
Jude | 12
Mark | 14
Bin  | 15

第二个数据表

Name
------
Jude
Robin
Kamil

数据表必须具有:

Name   | Number
-------|----------
Mark   | 14
Bin    | 15

我有这种方法可以比较两个数据表并获得差异,但是如何获得数字。

public static DataTable CompareTables(DataTable first, DataTable second)
{
first.TableName = "FirstTable";
second.TableName = "SecondTable";

//Create Empty Table
DataTable table = new DataTable("Difference");

try
{
//Must use a Dataset to make use of a DataRelation object
using (DataSet ds = new DataSet())
{
//Add tables
ds.Tables.AddRange(new DataTable[] { first.Copy(), second.Copy() });

//Get Columns for DataRelation
DataColumn[] firstcolumns = new DataColumn[1];
firstcolumns[0] = ds.Tables[0].Columns[0];

DataColumn[] secondcolumns = new DataColumn[1];
secondcolumns[0] = ds.Tables[1].Columns[0];

//Create DataRelation
DataRelation r = new DataRelation(string.Empty, firstcolumns, secondcolumns, false);

ds.Relations.Add(r);

//Create columns for return table
for (int i = 0; i < first.Columns.Count; i++)
{
table.Columns.Add(first.Columns[i].ColumnName, first.Columns[i].DataType);
}

//If First Row not in Second, Add to return table.
table.BeginLoadData();

foreach (DataRow parentrow in ds.Tables[0].Rows)
{
DataRow[] childrows = parentrow.GetChildRows(r);
if (childrows == null || childrows.Length == 0)
table.LoadDataRow(parentrow.ItemArray, true);
}

table.EndLoadData();

}
}
catch (Exception ex)
{

}

return table;
}

让数据库处理这些事情:

SELECT name, number from table1 where name not in (select name from table2);
    public static DataTable CompareTables(DataTable first, DataTable second)
    {
        second.PrimaryKey = new DataColumn[] {second.Columns["Name"]};

        DataTable difference = second.Clone();

        foreach (DataRow row in first.Rows) {
            if (second.Rows.Find(row["Name"]) == null)
            {
                difference.ImportRow(row);
            }
        }

        return difference;
    }

@ user3527065您的代码将引发参数异常为否。 的列数必须相同。 DataRelation r =新的DataRelation(string.Empty,firstcolumns,secondcolumns,false); 我的情况是第一列有2列,第二列有1列,因此它将引发参数异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM