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

本文介绍如何使用LINQ查询语言处理DataTable,实现数据筛选与对比。包括排除免打扰用户的推送列表及比对用户权限表中的有效用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果两个datatable的字段完全一致的话,可以直接使用Except,Intersect

[html]  view plain  copy
  1. //与免打扰中的用户进行比较,筛选出可以正常接收推送的用户  
  2.                                 var normalReceive = dtUser.AsEnumerable().Except(dtDND.AsEnumerable(), DataRowComparer.Default);  
  3.   
  4.                                 //比对两个表的用户名一致的,保存username到list中  
  5.                                 var intersectUser = dtUserPower.AsEnumerable().Intersect(normalReceive, DataRowComparer.Default);  
  6.   
  7.     
  8.   
  9. foreach (var item in intersectUser)  
  10. {  
  11.    listTemp.Add(item["username"].ToString());  
  12. }  

如果两个datatable中有部分字段相同,也就是说有可进行比对的字段的话。

[html]  view plain  copy
  1. //与免打扰中的用户进行比较,筛选出可以正常接收推送的用户  
  2.                                 var normalReceive = from r in dtUser.AsEnumerable()  
  3.                                                     where  
  4.                                                         !(from rr in dtDND.AsEnumerable() select rr.Field<string>("username")).Contains(  
  5.                                                         r.Field<string>("username"))  
  6.                                                     select r;  
  7.                                   
  8.                                 //比对两个表的用户名一致的,保存token到list中  
  9.                                 var intersectUser = from r in normalReceive.AsEnumerable()  
  10.                                                     where  
  11.                                                         (from rr in dtUserPower.AsEnumerable() select rr.Field<string>("username")).Contains(  
  12.                                                         r.Field<string>("username"))  
  13.                                                     select r;  
  14.   
  15.                                 foreach (var item in intersectUser)  
  16.                                 {  
  17.                                     listTemp.Add(item["token"].ToString());  
  18.                                 }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值