C# 如何比较两个相同格式的数据表之间的差异?

C# 如何比较两个相同格式的数据表之间的差异?,c#,linq,datatable,C#,Linq,Datatable,我有两个数据表具有相同的列数。我必须检查新数据表中哪个名称具有不同的组或子组。(使用Linq) var lstreult=(来自DataTableOLD.AsEnumerable()中的_old) 将_new加入到_old.Field(“代码”)上的DataTableNew.AsEnumerable()中 等于新字段(“代码”) 其中_旧.字段(“组”)!=_新.字段(“组”)|| _旧的.Field(“子组”)!=\u新的.Field(“子组”) 选择新的 { OLDCODE=_old.Fie

我有两个数据表具有相同的列数。我必须检查新数据表中哪个名称具有不同的组或子组。(
使用Linq

var lstreult=(来自DataTableOLD.AsEnumerable()中的_old)
将_new加入到_old.Field(“代码”)上的DataTableNew.AsEnumerable()中
等于新字段(“代码”)
其中_旧.字段(“组”)!=_新.字段(“组”)||
_旧的.Field(“子组”)!=\u新的.Field(“子组”)
选择新的
{
OLDCODE=_old.Field(“代码”),
OLDNAME=_old.Field(“NAME”),
OLDGROUP=_old.Field(“组”),
OLDSUBGROUP=_old.Field(“SUBGROUP”),
NEWCODE=_new.Field(“CODE”),
NEWNAME=_new.Field(“NAME”),
新组=_新字段(“组”),
NEWSUBGROUP=_新的.Field(“子组”)
}
);
var lstreult=(来自DataTableOLD.AsEnumerable()中的_old)
将_new加入到_old.Field(“代码”)上的DataTableNew.AsEnumerable()中
等于新字段(“代码”)
其中_旧.字段(“组”)!=_新.字段(“组”)||
_旧的.Field(“子组”)!=\u新的.Field(“子组”)
选择新的
{
OLDCODE=_old.Field(“代码”),
OLDNAME=_old.Field(“NAME”),
OLDGROUP=_old.Field(“组”),
OLDSUBGROUP=_old.Field(“SUBGROUP”),
NEWCODE=_new.Field(“CODE”),
NEWNAME=_new.Field(“NAME”),
新组=_新字段(“组”),
NEWSUBGROUP=_新的.Field(“子组”)
}
);
DataTableOLD

CODE    NAME    GROUP   SUBGROUP
c1      AA      GP1     SGP1
c2      BB      GP1     SGP1
c3      CC      GP1     SGP2
c4      DD      GP1     SGP2
c5      EE      GP2     SGP3


DataTableNEW
CODE    NAME    GROUP   SUBGROUP
c1      AA      GP1     SGP4
c2      BB      GP1     SGP1
c3      CC      GP3     SGP5
c4      DD      GP1     SGP2
c6      FF      GP2     SGP3


Resultant table (show only those where there is mismatch in either group or group and subgroup both)

OLDCODE OLDNAME OLDGROUP OLDSUBGROUP  NEWCODE NEWNAME NEWGROUP NEWSUBGROUP
c1      AA      GP1         SGP1        c1      AA      GP1     SGP4
c3      CC      GP1         SGP2        c3      CC      GP3     SGP5
var lstResult = (from _old in DataTableOLD.AsEnumerable()
    join _new in DataTableNew.AsEnumerable() on _old.Field<string>("CODE") 
      equals _new.Field<string>("CODE")
    where _old.Field<string>("GROUP") != _new.Field<string>("GROUP") ||
    _old.Field<string>("SUBGROUP") != _new.Field<string>("SUBGROUP")
    select new
    {
        OLDCODE = _old.Field<string>("CODE"),
        OLDNAME = _old.Field<string>("NAME"),
        OLDGROUP = _old.Field<string>("GROUP"),
        OLDSUBGROUP = _old.Field<string>("SUBGROUP"),
        NEWCODE = _new.Field<string>("CODE"),
        NEWNAME = _new.Field<string>("NAME"),
        NEWGROUP = _new.Field<string>("GROUP"),
        NEWSUBGROUP = _new.Field<string>("SUBGROUP")
     }
);