首页 > 编程语言 >C# Linq俩个list<Datarow> 取差集,并自定义字段

C# Linq俩个list<Datarow> 取差集,并自定义字段

时间:2023-04-09 19:34:02浏览次数:65  
标签:取差集 自定义 C# list1 ID columnName DataRow list2 dataTable


可以自定义类 ,也可以从参考官网文档:Enumerable.Except 方法 (System.Linq) | Microsoft Learn


List<DataRow> list1 = new List<DataRow>(); List<DataRow> list2 = new List<DataRow>(); DataTable dataTable = new DataTable(); dataTable.Columns.Add("ID", typeof(int)); dataTable.Columns.Add("Name", typeof(string)); DataRow row1 = dataTable.NewRow(); row1["ID"] = 1; row1["Name"] = "Alice"; list1.Add(row1); DataRow row2 = dataTable.NewRow(); row2["ID"] = 2; row2["Name"] = "Bob"; list1.Add(row2); DataRow row3 = dataTable.NewRow(); row3["ID"] = 1; row3["Name"] = "Alice"; list2.Add(row3); DataRow row4 = dataTable.NewRow(); row4["ID"] = 3; row4["Name"] = "Dave"; list2.Add(row4); List<DataRow> result = list1.Except(list2, new DataRowComparer("ID")).ToList(); list1 = list1.Where(row => !list2.Contains(row, new DataRowComparer("ID"))).ToList(); list1.RemoveAll(row => list2.Contains(row)); foreach (DataRow row in list1) { Console.WriteLine(row["Name"]); } class DataRowComparer : IEqualityComparer<DataRow> { private readonly string _columnName; public DataRowComparer(string columnName) { _columnName = columnName; } bool IEqualityComparer<DataRow>.Equals(DataRow?x, DataRow?y) { if (x == null || y == null) { return false; } return x[_columnName].Equals(y[_columnName]); } int IEqualityComparer<DataRow>.GetHashCode(DataRow obj) { return obj[_columnName].GetHashCode(); } }

 

标签:取差集,自定义,C#,list1,ID,columnName,DataRow,list2,dataTable
From: https://www.cnblogs.com/jiaozai891/p/17300864.html

相关文章

  • LeetCode 98.验证二叉搜索树
    1.题目:给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。有效二叉搜索树定义如下:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例1:输入:root=[2,1,3]输出:true来源:力扣(LeetCode......
  • C盘爆满的解决方法,不用删除文件,使用分区助手无损增加内存
    一、分区助手傲梅科技对于我们C盘内存不足的来说,老师推荐的yyds。我的内存C盘历史最低是900多M,1.5G还是多的,经过我不断的删除文件,发现没什么用,电脑用久了C盘文件占内存自然就多了!!改变不了!!所以方法是用其他盘的内存移到C盘。一分钟解决。下载完直接看使用步骤二、下载1.1、......
  • C++构造函数的调用
    对象特性---构造函数和析构函数构造函数---没有回值也不写void---函数值和类名相同---构造函数可以有参数,因此可以发生重载---程序在调用对象的时候自动调用构造,无须手动调用,只能调用一次析构函数语法---析构函数,没有返回值也不写void---函数名和类名也相同,在名称前加上符号~---......
  • ASP.NET Core如何知道一个请求执行了哪些中间件?
    第一步,添加Nuget包引用需要添加两个Nuget包分别是:Microsoft.AspNetCore.MiddlewareAnalysis和Microsoft.Extensions.DiagnosticAdapter,前者是分析记录中间件核心代码实现后者是用来接收日志输出的,由于是用的DiagnosticSource方式记录日志,所以需要使用DiagnosticListener对象的Sub......
  • 小程序自定义组件 - 组件通信父传子
    页面组件化后,随即就面临组件间的通信问题,就组件间如何传递数据的问题.在vue中,总结下来就是父组件通过prop属性给子组件传简单的值,通过slot给子组件传dom等复杂数据;反之,子组件可通过$emit向父组件发射事件,然后在父组件中处理逻辑,达到子传父的效果.在小......
  • FastCFS:再谈 选主 与 过半写:续:2节点+vote节点 群集
    偶数的 2节点+vote节点群集健壮程度如何呢?先说结论:可以保证足够健壮。 虽然vote节点仅参与选主,不参与数据复制过程的过半写,but,对于FastCFS群集来说,先要完成“选主”才能正常进行数据复制层面的”过半写“!如果没有“选主”,根本就不会有后续“过半写”的问题。哈哈。 所......
  • Vulnhub:Digitalworld.local (Development)靶机
    kali:192.168.111.111靶机:192.168.111.130信息收集端口扫描nmap-A-v-sV-T5-p---script=http-enum192.168.111.130查看网站首页源码访问development目录,提示存在一个流量包查看流量包发现另一个网站路径:/developmentsecretpage/directortestpagev1.php访问该路......
  • WebGIS|使用Openlayers获取Geoserver发布的WFS和WCS服务
    1、发布WFS和WCS服务发布WFS服务Web要素服务(WFS)支持对地理要素的插入,更新,删除,检索和发现服务。该服务根据HTTP客户请求返回GML数据。其基础接口是:GetCapabilities,DescribeFeatureType,GetFeatureGetCapabilities同上。DescribeFeatureType返回要素结构,以便客户端进行查询和......
  • Web开发|XML Schema (XSD) 学习
    采用XSD建立教师、学生之间的关系。假设有两个实体“学生”和“教师”,一个学生可以有多个老师,一个老师也可以有多个学生,二者为多对多的关系。在XSD中描述多对多的关系可以使用XML元素的引用和复杂类型的组合,使用中间表(或连接表)来表示多对多关系。首先,我们定义“学生”和“教师”......
  • C# WinForm操作配置文件AppSettings获取、增加、删除、修改
    在C#WinForm开发中,如果想要修改AppSettings中的值,发现用下面这个代码并没有成功。ConfigurationManager.AppSettings.Set(key,value);//修改值,但是没有成功下面提供可以用的获取、增加、删除、修改appSettings的方法。publicclassWinConfigHelper{///<summary>......