是否有任何直接的方法從兩個數據表中獲取不匹配的值。我有一個數據表,它返回來自Active Directory的所有組,另一個數據表由來自sharepoint列表的所有組名組成。但我通過比較這兩個數據表需要非匹配值。請幫助我,如果可能的話。從兩個數據表中獲取不匹配的值
在此先感謝。
是否有任何直接的方法從兩個數據表中獲取不匹配的值。我有一個數據表,它返回來自Active Directory的所有組,另一個數據表由來自sharepoint列表的所有組名組成。但我通過比較這兩個數據表需要非匹配值。請幫助我,如果可能的話。從兩個數據表中獲取不匹配的值
在此先感謝。
您可以使用DataRowComparer來比較行。
例如,要比較的2個數據表的第一行:
DataRow left = table1.Rows[0];
DataRow right = table2.Rows[0];
IEqualityComparer<DataRow> comparer = DataRowComparer.Default;
bool bEqual = comparer.Equals(left, right);
您可以使用.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);
我想比較DataTable1在DataTable2
您可以使用LINQ不存在。非常有效的方法是Enumerable.Except
或(爲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;
在這裏,您可以使用rowsOnlyInDT1.CopyToDataTable
創造一個新的DataTable
table1中的行是唯一的/新的,或者使用foreach
來枚舉它們。
您是否想要DataTable2中不存在的所有DataTable1,DataTable1中不存在的所有DataTable2中的所有數據嗎?什麼專欄決定重複?你想要什麼結果,DataRow或關鍵列? –
@TimSchmelter:我想比較DataTable2中不存在的DataTable1 – MAC