用RowNo比较2个数据集
本文关键字:数据集 2个 比较 RowNo | 更新日期: 2023-09-27 18:09:41
在下面的代码中,我有两个数据集,我想比较数据集并检查它是否有差异。
- 在第一个数据集我有3列Empname, EmpID, RowNo
- 在第二个数据集我有3列Empname, EmpID, RowNo
在这两个数据集中,RowNo是一个常量列,其他两个列是动态的,所以我想用下面的场景来比较数据集:
Dataset1:
Empname,EmpID,RowNo
AAA E1 1
BBB E2 2
CCC E3 3
Dataset 2:
Empname,EmpID,RowNo
AAA E1 1
DDD E4 4
EEE E5 5
BBB E8 2
CCC E9 3
我想通过RowNo比较数据集1和数据集2,所以比较它应该返回RowNo 2和3被修改。所以谁来帮我做这个
代码:for (int i=0; i < dataset1.Tables[0].Rows.Count; i++)
{
if (!(dataset1.Tables[0].Rows[i]["RowNo"] == dataset2.Tables[0].Rows[i] ["RowNo"] )
{
return i;
}
}
像这样的东西应该会帮助你走在你的路上
dataset2.Tables[0].AsEnumerable().Where(x => x.Field<int>("RowNum") == i);
这是一种方法(我相信一定有其他方法,也许更简单)。首先,将两个数据表合并为一个,并按行号对数据进行分组。之后,您只需按组比较数据表,以检查哪些数据表被修改了。像这样:
DataTable dt3 = dt1.Copy();
dt3.Merge(dt2);
var grouped=dt3.AsEnumerable().GroupBy(x => x.Field<int>("RowNo"));
List<int> RowsModified = new List<int>();
foreach(var group in grouped)
{
if (group.Count() > 1)
{
DataRow dr = dt1.NewRow();
foreach (var row in group)
{
if (dr["RowNo"] == DBNull.Value)
{
dr = row;
}
else
{
if (!dr.ItemArray.SequenceEqual(row.ItemArray))
{
RowsModified.Add(group.Key);
break;
}
}
}
}
}
最后,在rowsmomodified中,您将得到行号列表。