C# 兩個datatable中的數據快速比較返回交集或差集[z]


 

最基本的寫法無非是寫多層foreach循環,數據量多了,循環的次數是乘積增長的。

這里推薦使用Except()差集、Intersect()交集,具體性能沒有進行對比。

 

如果兩個datatable的字段完全一致的話,可以直接使用Except,Intersect

 

//與免打擾中的用戶進行比較,篩選出可以正常接收推送的用戶
var normalReceive = dtUser.AsEnumerable().Except(dtDND.AsEnumerable(), DataRowComparer.Default);

//比對兩個表的用戶名一致的,保存username到list中
var intersectUser = dtUserPower.AsEnumerable().Intersect(normalReceive, DataRowComparer.Default);


  
foreach (var item in intersectUser)
{
listTemp.Add(item["username"].ToString());
}

 

如果兩個datatable中有部分字段相同,也就是說有可進行比對的字段的話。

 

//與免打擾中的用戶進行比較,篩選出可以正常接收推送的用戶
var normalReceive = from r in dtUser.AsEnumerable()
where
!(from rr in dtDND.AsEnumerable() select rr.Field<string>("username")).Contains(
r.Field<string>("username"))
select r;

//比對兩個表的用戶名一致的,保存token到list中
var intersectUser = from r in normalReceive.AsEnumerable()
where
(from rr in dtUserPower.AsEnumerable() select rr.Field<string>("username")).Contains(
r.Field<string>("username"))
select r;

foreach (var item in intersectUser)
{
listTemp.Add(item["token"].ToString());
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM