是否有任何直接方法可以从两个数据表中获取不匹配的值。我有一个数据表,它返回 Active Directory 中的所有组,另一个数据表包含共享点列表中的所有组名。但是我需要通过比较这两个数据表来获得不匹配的值。如果可能的话,请帮助我。
提前致谢。
是否有任何直接方法可以从两个数据表中获取不匹配的值。我有一个数据表,它返回 Active Directory 中的所有组,另一个数据表包含共享点列表中的所有组名。但是我需要通过比较这两个数据表来获得不匹配的值。如果可能的话,请帮助我。
提前致谢。
我想比较 DataTable2 中不存在的 DataTable1
您可以使用 Linq。非常有效的方法是Enumerable.Except
或Enumerable.Join
(作为LEFT OUTER JOIN)使用集合:
var keyColRows = dt1.AsEnumerable()
.Select(r => r.Field<int>("KeyColumn")
.Except(dt2.AsEnumerable().Select(r2 => r2.Field<int>("KeyColumn"));
foreach(int inTable2Missing)
Console.WriteLine(inTable2Missing);
或Join
选择整体的方法DataRow
:
var rowsOnlyInDT1 = from r1 in dt1.AsEnumerable()
join r2 in dt2.AsEnumerable()
on r1.Field<int>("KeyColumn") equals r2.Field<int>("KeyColumn") into groupJoin
from subRow in groupJoin.DefaultIfEmpty()
where subRow == null
select r1;
在这里,您可以使用在 table1 中rowsOnlyInDT1.CopyToDataTable
创建一个新的行,这些行是唯一的/新的或用于枚举它们。DataTable
foreach
您可以使用它.Except
来执行此操作。(假设有一ID
列)
IEnumerable<int> idsInDataTableA = dataTableA.AsEnumerable().Select(row => (int)row["ID"]);
IEnumerable<int> idsInDataTableB = dataTableB.AsEnumerable().Select(row => (int)row["ID"]);
IEnumerable<int> difference = idsInDataTableA.Except(idsInDataTableB );
您可以使用DataRowComparer来比较行。
例如,要比较 2 个数据表的第一行:
DataRow left = table1.Rows[0];
DataRow right = table2.Rows[0];
IEqualityComparer<DataRow> comparer = DataRowComparer.Default;
bool bEqual = comparer.Equals(left, right);