博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 两个datatable中的数据快速比较返回交集或差集
阅读量:4691 次
发布时间:2019-06-09

本文共 1989 字,大约阅读时间需要 6 分钟。

前几天服务端有业务要增加点需求,有一个处理是利用datatable比对出两个不同的用户列表,拿着比对的结果再与另外一个datatable进行比较。

最基本的写法无非是写多层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
("username")).Contains( r.Field
("username")) select r; //比对两个表的用户名一致的,保存token到list中 var intersectUser = from r in normalReceive.AsEnumerable() where (from rr in dtUserPower.AsEnumerable() select rr.Field
("username")).Contains( r.Field
("username")) select r; foreach (var item in intersectUser) { listTemp.Add(item["token"].ToString()); }

 

 

 

转载于:https://www.cnblogs.com/yourancao520/archive/2013/05/24/3096769.html

你可能感兴趣的文章