【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;
                }
            }

四、项目展示

五、资源链接

相关推荐
练习时长一年8 小时前
Jdk反射优化
java·开发语言
Turnsole_y8 小时前
pytest与Selenium结合使用指南
开发语言·python
郝学胜-神的一滴9 小时前
深入解析C++命令模式:设计原理与实际应用
开发语言·c++·程序人生·软件工程·命令模式
ʚ希希ɞ ྀ9 小时前
单词接龙----图论
开发语言·javascript·ecmascript
散峰而望9 小时前
基本魔法语言数组 (一) (C语言)
c语言·开发语言·编辑器·github·visual studio code·visual studio
MATLAB代码顾问9 小时前
MATLAB实现模糊PID控制
开发语言·matlab
虾说羊10 小时前
ssm面试题梳理
java·开发语言·rpc
Liudef0610 小时前
基于Java的LLM长上下文数据预处理方案:实现128k上下文智能数据选择
java·开发语言·人工智能
sky-stars10 小时前
.NET 泛型编程(泛型类、泛型方法、泛型接口、泛型委托、泛型约束)
c#·.net·.netcore