【发布时间】:2011-01-15 07:58:40
【问题描述】:
我有一个包含 72 列的数据表。
我将使用 VSTO 将其下载到 Excel 表中,效果很好。
现在用户将更改这些行中的一个或所有这些行,并且还将插入一个新行。
考虑先下载的数据表为dtA,在excel表中修改后的数据表为dtB。
我想比较 dtA 和 dtB。
我需要找出 dtB 中所有不存在于 dtA 中的行。
我不能为每一行都放置 foreach 循环并评估它是一种非常不整洁的编码方式。
有什么更好的方法来做到这一点?
我是这样做的,
DataTable dtA = new DataTable();
dtA.Columns.Add("ENo");
dtA.Columns.Add("ENo1");
dtA.Columns.Add("ENo2");
dtA.Columns.Add("ENo3");
dtA.Columns.Add("ENo4");
for (int i = 0; i < 5; i++)
{
DataRow dr = dtA.NewRow();
dr[0] = "Part 0 " + i.ToString();
dr[1] = "Part 1 " + i.ToString();
dr[2] = "Part 2 " + i.ToString();
dr[3] = "Part 3 " + i.ToString();
dr[4] = "Part 4 " + i.ToString();
dtA.Rows.Add(dr);
}
DataTable dtB = new DataTable();
dtB.Columns.Add("ENo");
dtB.Columns.Add("ENo1");
dtB.Columns.Add("ENo2");
dtB.Columns.Add("ENo3");
dtB.Columns.Add("ENo4");
for (int i = 5; i < 10; i++)
{
DataRow dr = dtB.NewRow();
dr[0] = "Part 0 " + i.ToString();
dr[1] = "Part 1 " + i.ToString();
dr[2] = "Part 2 " + i.ToString();
dr[3] = "Part 3 " + i.ToString();
dr[4] = "Part 4 " + i.ToString();
dtB.Rows.Add(dr);
}
Response.Write("\n");
Response.Write("dt A");
Response.Write("\n");
for (int i = 0; i < dtA.Rows.Count; i++)
{
Response.Write(dtA.Rows[i][i].ToString());
Response.Write("\n");
}
Response.Write("\n");
Response.Write("dt B");
Response.Write("\n");
for (int i = 0; i < dtB.Rows.Count; i++)
{
Response.Write(dtB.Rows[i][i].ToString());
Response.Write("\n");
}
var VarA = dtA.AsEnumerable();
var varB = dtA.AsEnumerable();
var diff = VarA.Except(varB);
Response.Write("except");
foreach (var n in diff)
{
Response.Write(n.Table.Rows[0].ToString());
}
但我不知道在 foreach var 中使用什么, 请问我应该用什么?
【问题讨论】:
标签: c#