按RowNo比较2数据集
在下面的代码中,我有两个数据集,我想比较数据集并检查它是否有差异。按RowNo比较2数据集
- 在第一数据集我有3列Empname,的EmpID,RowNo
- 在第二数据集I有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
我要与数据集2由RowNo因此,对比较数据集1比较,它应该返回RowNo 2A nd 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);
这里有一个办法做到这一点(我敢肯定,必须有其他人,也许更简单) 。首先,将两个数据表合并成一个,然后用rowno对数据进行分组。之后,您只需按组比较数据行以检查哪些被修改。类似这样的:
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;
}
}
}
}
}
最后,在RowsModified中,您将得到一个行号列表。希望能帮助到你。
从上面的例子RowNo 2和3被修改为EmpID在数据集2中的2和3中不同 – user2432361
是的......我用您的示例数据并且此方法返回行分子2和3 @ user2432361 – Pikoh
我的第一个问题是为什么你使用2个数据集而不是2个数据表? –
@SimonPrice我认为这很容易,所以我试过。如果Datatable如何比较它。 – user2432361
这几乎是你所做的,但一个漫长的啰嗦周围。 –