zoukankan      html  css  js  c++  java
  • 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());
    }

  • 相关阅读:
    欧拉函数、欧拉定理、费马小定理、拓展欧拉定理
    $CF 635 (Div 2)$
    $CF 634 (Div 3)$
    $CF 633 (Div 2)$
    $ACM$ 课第三次作业-搜索
    《信息安全数学基础一》第一章笔记
    接口测试工具与接口测试框架
    【python】基础知识小结
    【mongo】多个字段进行分组查询
    【mongo】去重操作
  • 原文地址:https://www.cnblogs.com/jjj250/p/10551232.html
Copyright © 2011-2022 走看看