当前位置: 首页 > news >正文

C#判断DataTable1 A列的集合是否为DataTable2 B列的集合的子集

DataSet ds2 = (DataSet)res2.Anything;
// 检查  集合B是否为集合A的子集
var table1MaterialCodes = ds.Tables[2].AsEnumerable().Select(row => row["Code"]).ToList();  //DataSet1 表Code列集合A
var table2MaterialCodes = ds2.Tables[0].AsEnumerable().Select(row => row["MaterialCode"]).ToList(); //DataSet2 表MaterialCode列集合B
bool isSubset = table2MaterialCodes.All(code => table1MaterialCodes.Contains(code));   //判断集合B是否为集合A的子集if (!isSubset)
{
var missingMaterialCodes = table2MaterialCodes.Where(code => !table1MaterialCodes.Contains(code)).ToList();
StringBuilder msg = new StringBuilder();
foreach (var code in missingMaterialCodes)
{// msg.Append(",");msg.Append(code);msg.Append("。");
}msg.Append("显示集合B不在集合A的数据");ShowMessage(msg.ToString(), false);return;}
}
  1. LINQ (Language Integrated Query): LINQ是.NET框架的一部分,它提供了一种查询各种数据源(如数组、集合、XML文档和数据库)的能力,就像查询SQL数据库一样。这里使用的是LINQ to Objects,即对内存中的对象集合进行查询。

  2. bool isSubset: 这是一个布尔变量,用于存储最终的判断结果。如果条件成立(即ds2.Tables[0]的所有materialcode都在ds0.Tables[2]中找到),则isSubsettrue;否则为false

  3. table2MaterialCodes.All(...): All是LINQ中的一个扩展方法,适用于任何实现了IEnumerable<T>接口的类型。它接受一个谓词作为参数(在这个例子中是一个lambda表达式),并检查序列中的所有元素是否都满足这个谓词。如果序列中的每个元素都使这个谓词返回true,那么All方法本身就返回true;如果序列中有任何一个元素使谓词返回falseAll方法就返回false

  4. code => table1MaterialCodes.Contains(code): 这是传递给All方法的谓词,一个lambda表达式。对于table2MaterialCodes列表中的每一个materialcode值,这个表达式都会被求值。code是lambda表达式的参数,代表table2MaterialCodes列表中的当前元素。table1MaterialCodes.Contains(code)是lambda表达式的主体,它检查table1MaterialCodes列表是否包含code。如果包含,表达式返回true;否则返回false

综上所述,这行代码bool isSubset = table2MaterialCodes.All(code => table1MaterialCodes.Contains(code));的作用是:遍历ds2.Tables[0]中的每个materialcode,检查它是否在ds.Tables[0]code列表中。如果所有的materialcode都能在ds.Tables[2]中找到,那么isSubset将为true,表示ds2.Tables[0]中的materialcodeds.Tables[2]code的一个子集。如果有任何一个materialcodeds.Tables[2]中找不到,isSubset将为false

当判断出ds2.Tables[0]中的某些materialcodeds.Tables[2]中不存在时,我们使用LINQ的Where方法配合Contains方法来筛选出那些在ds.Tables[2]中不存在的materialcode。这是通过table2MaterialCodes.Where(code => !table1MaterialCodes.Contains(code)).ToList()这行代码完成的,它会生成一个列表missingMaterialCodes,包含了所有在ds.Tables[2]中找不到的materialcode

http://www.lryc.cn/news/309857.html

相关文章:

  • VirtualBox 桥接网卡 未指定 “未能启动虚拟电脑Ubuntu,由于下述物理网卡未找到:”
  • 基于yolov5的电瓶车和自行车检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】
  • vscode如何远程到linux python venv虚拟环境开发?(python虚拟环境、vscode远程开发、vscode远程连接)
  • 蓝桥杯第十二届电子类单片机组程序设计
  • 基于springboot+vue的工作流程管理系统
  • 【LeetCode刷题】146. LRU 缓存
  • 奇酷网络用AI思维办公:不允许做PPT,只能用Word,只能一页纸
  • 【笔记】-编程语言以及应用领域
  • MWC 2024丨美格智能推出5G RedCap系列FWA解决方案,开启5G轻量化新天地
  • mTLS: openssl创建CA证书
  • Python 进阶语法:os
  • 测试需求平台9-Table 组件应用产品列表优化
  • targetSdkVersion > 30 如何将下载的网络视频 保存到手机相册里更新
  • C#,无监督的K-Medoid聚类算法(K-Medoid Algorithm)与源代码
  • 宏定义中#与##的注意事项
  • Java函数式编程
  • 【深度优先搜索】【树】【C++算法】2003. 每棵子树内缺失的最小基因值
  • 电脑开机显示器没有信号而且键盘鼠标不亮怎么解决?
  • RLWE同态加密编码打包——系数打包
  • Codeforces Round 930 (Div. 2 ABCDEF题) 视频讲解
  • 【LeetCode-中等】209.长度最小的子数组-双指针/滑动窗口
  • MACOS/LINUX/WINDOWS C++ 获取当前可执行程序的完整路径
  • 【Nginx笔记02】通过Nginx服务器转发客户端的WebSocket接口到后端服务
  • 关于高德地图及其APP获取地图数据的研究
  • 【Python入门教程】Python实现鸡兔同笼
  • 微信小程序,h5端自适应登陆方式
  • 物体检测-系列教程20:YOLOV5 源码解析10 (Model类前向传播、forward_once函数、_initialize_biases函数)
  • 贪吃蛇(C语言)步骤讲解
  • MySQL 数据库表设计和优化
  • JavaScript进阶-高阶技巧