zoukankan      html  css  js  c++  java
  • C# 两个datatable中的数据快速比较返回交集或差集

    前几天服务端有业务要增加点需求,有一个处理是利用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());
                                    }
  • 相关阅读:
    define的用法
    MySQL索引使用方法和性能优化
    自己写的一个Js小插件
    .net处理JSON简明教程
    史上最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂神仙都难救你啦~
    Python面向对象之-反射
    Python内置函数之classmetho staticmethod
    Python内置函数之-property
    python面向对象三大特性-多态
    python面向对象三大特性之封装
  • 原文地址:https://www.cnblogs.com/yourancao520/p/3096769.html
Copyright © 2011-2022 走看看