Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何比较两个列数不同的DataTable?_C#_Datatable - Fatal编程技术网

C# 如何比较两个列数不同的DataTable?

C# 如何比较两个列数不同的DataTable?,c#,datatable,C#,Datatable,如果我想比较两个datatable并在新datatable中获得差异,但我想保留一个未比较的列。 例如: 第一个数据表 Name | Number ---- |------- Jude | 12 Mark | 14 Bin | 15 Name ------ Jude Robin Kamil 第二个数据表 Name | Number ---- |------- Jude | 12 Mark | 14 Bin | 15 Name ------ Jude Robin Kamil 数据表必须具有:

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

第一个数据表

Name | Number ---- |------- Jude | 12 Mark | 14 Bin | 15 Name ------ Jude Robin Kamil 第二个数据表

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);

@user3527065由于列数必须相同,代码将引发参数异常。 DataRelation r=新DataRelationstring.Empty,firstcolumns,secondcolumns,false;
I您的案例第一列有2列,而第二列有1列,因此会引发参数异常。

请提供更多关于1的详细信息,说明您发现差异的基础-不同的列或数据之间的差异。2您所说的“我想保留一个未共享的列”是什么意思?那么,您想要两个表的并集还是交集?基于什么标准?数据之间的差异,如我在上面的示例中所示,Mark和Bin是不同之处,因为它们不存在于第二个表中。因此,根据第一个表和第二个表之间的比较,您希望第一个表中有表3,其中第一个表中有名称,但第二个表中没有名称。在您的案例中,您消除了两个表中都存在的Jude,因此输出是标记和仓位号。如果我的理解是正确的,并且是基于数据的,那么为什么在获取数据时不能处理它呢?但是这如何回答这个问题呢?