比较数据表并将不匹配的行保存在第三个数据表中

维诺德·库马尔(Vinod Kumar)

我正在尝试比较两个数据表并捕获第三个数据表中的差异。

DataTable one = new DataTable();
one.Columns.Add("ID");
one.Columns.Add("PCT");
one.Rows.Add("1", "0.1");
one.Rows.Add("2", "0.2");
one.Rows.Add("3", "0.3");
DataTable two = new DataTable();
two.Columns.Add("ID");
two.Columns.Add("PCT");
two.Columns.Add("OldPCT");
two.Rows.Add("1", "0.1", "0");
two.Rows.Add("2", "0.1", "0");
two.Rows.Add("3", "0.9", "0");
two.Columns.Remove("OldPCT");

//First method
DataTable three = two.AsEnumerable().Except(one.AsEnumerable()).CopyToDataTable();
foreach (DataRow dr in three.AsEnumerable())
{
    string strID = dr[0].ToString();
    string strPCT = dr[1].ToString();
}

//second method
var diffName = two.AsEnumerable().Select(r => r.Field<string>("PCT")).Except(one.AsEnumerable().Select(r => r.Field<string>("PCT")));
if (diffName.Any())
{
    DataTable Table3 = (from row in two.AsEnumerable()
                        join name in diffName
                        on row.Field<string>("PCT") equals name
                        select row).CopyToDataTable();
}

到目前为止,我已经尝试了两种方法,但并没有达到预期的效果,应该是这样。

在第三个数据表中,值应如下所述。

 ID    PCT
 2     O.1
 3     0.9   

最近一期:

DataTable one = new DataTable();
one.Columns.Add("ID");
one.Columns.Add("PCT");
one.Rows.Add("1", "0.1");
one.Rows.Add("2", "0.2");
one.Rows.Add("2", "0.2");
one.Rows.Add("3", "0.3");
one.Rows.Add("3", "0.3");
DataTable two = new DataTable();
two.Columns.Add("ID");
two.Columns.Add("PCT");
two.Rows.Add("1", "0.1");
two.Rows.Add("2", "0.1");
two.Rows.Add("2", "0.1");
two.Rows.Add("3", "0.8");
two.Rows.Add("3", "0.9");

现在,我需要从数据表中获取除第一行以外的所有行。但是我只得到最后三行。

彼德

基于Hogan的答案,可以将其DataRowComparer.Default用作方法的第二个参数Except()(而不是创建自定义IEqualityComparer):

// this will get all rows from table two that don't match rows in one
// the result is an IEnumerable<DataRow> 
var unmatched = two.AsEnumerable()
  .Except(one.AsEnumerable(), DataRowComparer.Default);

// CopyToDataTable converts an IEnumerable<DataRow> into a DataTable
// but it blows up if the source object is empty

// this statement makes sure unmatched has data before calling CopyToDataTable()
// if it is empty, we 'clone' (make an empty copy) of one of the original DataTables
var three = unmatched.Any() ? unmatched.CopyToDataTable() : one.Clone();

这将对每行中的字段进行基于值的比较,以确定它们是否相等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从第三个表中检索数据

从第三个表中获取数据

从另一个数据表中存在的数据表中删除行

如何在限制第三个表中 2 个最新行的数据的同时连接表?

如何从两个相关表中获取数据并放入第三个表

使用两个表中的条目从第三个表中选择数据

使用宏比较两个 Excel 工作表中的列并将匹配项添加到第三个工作表

比较两个 Excel 工作簿并将匹配的数据复制到第三个工作簿

计算行均值并将其保存在R(数据表)的新列中

将三个带有 where 子句的选择查询合并到一个数据表中

MySql选择第三个表中不存在的连接行

比较数据表中的行

MySQL中三个表的数据表示

三个按钮更改数据表内容

比较2个数据表并结果丢失数据

Java映射两个数组中的数据并将其插入第三个数组

从 2 个不同的表中获取相同的数据并将其与 DB2 中的第三个表连接

将数据插入yii中的第三个表

使用两个数据范围 (OR) 将两个工作表中的数据动态组合到第三个工作表中时,防止填充第二个 QUERY 范围的标题行

jQuery比较同一行中的数据,如果正确,则显示该行中第三个数据的内容

如何从数据表中提取所有唯一/不同的行并将这些行保存在具有相同列的新数据表中?

根据多个选择条件匹配的两个不同数据框中的行构建第三个数据框

使用Oracle MERGE INTO将两个表中的数据合并到第三个表中

VBA Excel在第三个工作表中从2个不同的工作表中复制数据

比较两个数据框列并输出第三个

比较数据表

如何使用第三个表SQL Server从两个相关的表中检索数据

根据第三个表的数据连接两个表

Python/pandas:从两个数据帧中查找匹配值并返回第三个值