通过RowNo比较2个数据集

时间:2016-09-30 07:34:54

标签: c#

在下面的代码中,我有两个数据集,我想比较数据集并检查它是否有差异。

  • 在第一个数据集中,我有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

我想比较数据集1和数据集2的RowNo所以比较它应该返回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;
     }
}

2 个答案:

答案 0 :(得分:0)

这样的事情可以帮助你顺利上路

dataset2.Tables[0].AsEnumerable().Where(x => x.Field<int>("RowNum") == i);

答案 1 :(得分:0)

这是一种方法(我确信必须有其他人,也许更简单)。首先,将两个数据表合并为一个,并按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;
                    }
                }
           }
      }
}

最后,在RowsMo​​dified中,您将拥有行号列表。希望它有所帮助。