如何比较两个列数不同的DataTable
本文关键字:DataTable 何比较 比较 两个 | 更新日期: 2023-09-27 18:01:12
如果我想比较两个数据表并在新的数据表中获得差异,但我想保留一个未比较的列。示例:
第一个数据表
名称|编号----|-------Jude | 12标记|14纸盒|15
第二数据表
名称------JudeRobin卡米尔
数据表必须具有:
名称|编号-------|----------标记|14Bin | 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(字符串.Empty,firstcolumns,secondcolumns,false(;在您的情况下,第一列有2列,而第二列有1列,因此会引发参数异常。