【C#】List快速检查重复数据

系列文章

【C#】最全业务单据号生成(支持定义规则、流水号、传参数)

本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787

【C#】日期范围生成器(开始日期、结束日期)

本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663

【C#】组件化开发,调用dll组件方法

本文链接:https://blog.csdn.net/youcheng_ge/article/details/129492112

【C#】数据实体类使用

本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638

【C#】单据审批流方案

本文链接:https://blog.csdn.net/youcheng_ge/article/details/128972545

【C#】条码管理操作手册

本文链接:https://blog.csdn.net/youcheng_ge/article/details/126589496

【C#】IIS平台下,WebAPI发布及异常处理

本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836

【C#】代码模板生成工具

本文链接:https://blog.csdn.net/youcheng_ge/article/details/126890673

【C#】MySQL数据库导入工具(批量Excel插入)

本文链接:https://blog.csdn.net/youcheng_ge/article/details/126427323

【C#】简单二维码制作和打印工具

本文链接:https://blog.csdn.net/youcheng_ge/article/details/126884228

【C#】最全单据打印(打印模板、条形码&二维码、字体样式、项目源码)

本文链接:https://blog.csdn.net/youcheng_ge/article/details/129415723

【C#】Windows服务(Service)安装及启停方案

本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053794

【C#】穿透Session隔离,服务调用外部程序(无窗体界面解决)

本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053033

【C#】任务计划实现,使用Quartz类

本文链接:https://blog.csdn.net/youcheng_ge/article/details/123667723

【C#】源码解析正则表达式

本文链接:https://blog.csdn.net/youcheng_ge/article/details/118337074

【C#】软件版本和文件MD5记录(XML操作)

本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871

【C#】测试网络是否连通

本文链接:https://blog.csdn.net/youcheng_ge/article/details/110137288

【C#】根据名称获取编码(Dictionary获取key方法)

本文链接:https://blog.csdn.net/youcheng_ge/article/details/129816701

【C#】数据建模,你是使用DataTable还是List?

本文链接:https://blog.csdn.net/youcheng_ge/article/details/129792726

【C#】GridControl控件和数据集双向绑定

本文链接:https://blog.csdn.net/youcheng_ge/article/details/129423755

【C#】GridControl动态更换DataSource,数据查询异常处理

本文链接:https://blog.csdn.net/youcheng_ge/article/details/130305424

【C#】GridControl日期字段显示时分秒

本文链接:https://blog.csdn.net/youcheng_ge/article/details/130718303

【C#】GridControl增加选择列(不用二次点击)

本文链接:https://blog.csdn.net/youcheng_ge/article/details/130763713

【C#】数据库检查工具(可跨库访问)

本文链接:https://blog.csdn.net/youcheng_ge/article/details/97172329

【C#】代码解析--打印数据集

本文链接:https://blog.csdn.net/youcheng_ge/article/details/131431829

【C#】代码解析--截取整个方法函数

本文链接:https://blog.csdn.net/youcheng_ge/article/details/109817809

【C#】反射机制,动态加载类文件

本文链接:https://blog.csdn.net/youcheng_ge/article/details/131435110


文章目录


前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【项目实战】,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分贴合项目开发流程,让读者更加清楚本文能够解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程中的解决方案,是我项目开发相对成熟、可靠方法的总结,在不涉及职务作品、保密协议 的前提下,我将问题的解决方案重新梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。

·提示:本专栏为项目实战篇,未接触项目开发的同学可能理解困难,不推荐阅读。


一、问题描述

批量提交数据到数据持久层,检查数据是否存在重复。
注释:数据持久层(DAL)是软件架构中负责数据存储与管理的核心组件,主要功能是将内存中的数据永久保存到存储设备(如数据库)确保数据在系统重启或断电后仍可恢复

二、解决方案

可以考虑SQL检查重复记录的方式,group by分类汇总,计算count数>1的记录就是重复记录。同理,list也可以采用此方法。

三、软件开发(源码)

使用list.GroupBy(),对数据进行汇总,找到重复记录。

csharp 复制代码
 var list = (this.bsTax1040.DataSource as List<Tax1040>).Where(x => x.Selected).ToList();
            if (list == null || list.Count == 0)
            {
                throw new Exception(LM.L("请选择需要保存的数据!"));
            }

            var sbmessage = new StringBuilder();

            var listexist = list.GroupBy(info => new { info.CPaperGrow, info.CPaperGrowGrp, info.NGramWgt, info.NPe1, info.CRemark })
            .Select(grp => new
            {
                CPaperGrow = grp.Key.CPaperGrow,
                CPaperGrowGrp = grp.Key.CPaperGrowGrp,
                NGramWgt = grp.Key.NGramWgt,
                NPe1 = grp.Key.NPe1,
                CRemark = grp.Key.CRemark,
                count = grp.Count()
            }).ToList();
            var listrepetitive = listexist.FindAll(p => p.count > 1);
            foreach (var item in listrepetitive)
            {
                sbmessage.AppendLine(LM.L($"ZZ:{item.CPaperGrow},ZZFZ:{item.CPaperGrowGrp},KZ:{item.NGramWgt},PE1:{item.NPe1},BZ:{item.CRemark} 重复!"));
            }

            if (sbmessage.Length > 0)
            {
                if (MsgBox.ShowYesNo("以下数据存在重复,是否继续(点击"是"将忽略提示,继续保存,请在界面上手动修改数据)?\n\n" + sbmessage.ToString()) == DialogResult.No)
                {
                    return;
                }
            }

四、项目展示

五、资源链接

相关推荐
weixin_417396831 小时前
桌面云终端PXE启动失败怎么排查?从DHCP Option到镜像下发
开发语言·前端·php·技术·酒店·综合布线·弱电
某不知名網友1 小时前
ROS2进阶:服务通信、自定义SRV接口、参数服务器与基于服务的参数通信详解
java·开发语言·microsoft
java_nnnn2 小时前
LeetCode刷题滑动窗口(水果成篮+找到字符串中所有字母的异位词)Java
java·开发语言·leetcode
qetfw2 小时前
Bash 字符串处理:参数展开、序列与脚本执行方式
linux·开发语言·chrome·bash
小羊没烦恼!2 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
学Linux的语莫2 小时前
python中类的常见写法
开发语言·python·状态模式
需要8262 小时前
容器化 Java:镜像瘦身与 JVM 容器感知(cgroup)
java·开发语言·jvm
dyxal3 小时前
A2A 协议 v1.0 完全指南:方法名、Agent Card、三种绑定与 FastAPI 实战
开发语言·qt·fastapi
譕痕3 小时前
Rabbit 实例
java·开发语言·java-rabbitmq
综合简报3 小时前
黑五海外发稿投给谁?三类海外媒体发稿渠道的分工
开发语言·php·媒体