• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#两个datatable中的数据快速比较返回交集或差集

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

前几天服务端有业务要增加点需求,有一个处理是利用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<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());
                                }

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c:foreach如何输出序号发布时间:2022-07-13
下一篇:
C++将对象写入文件并读取发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap