热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#学习教程:在C#中比较两个列表中的两个重复列表分享

在C#中比较两个列表中的两个重复列表我有两个列表如下:ListcolExistingEmpData;ListcolExternalEmpData;他们每个人都有具有相同Id的员工记

在C#中比较两个列表中的两个重复列表

我有两个列表如下:

List colExistingEmpData; List colExternalEmpData; 

他们每个人都有具有相同Id的员工记录。 我知道这听起来很奇怪,但这是我现在所处的真实情况!

对于基于EmpId的colExternalEmpData中的每个雇员,都会对colExistingEmpData进行检查

 foreach (EmpData employee in colExternalEmpData) { var queryResult = colExistingEmpData.FindAll(thisEmployee => thisEmployee.Id == employee.Id); if(querResult.count == 0) { // Mark as INSERT } else if(querResult.count == 1) { // Mark as UPDATE } else // queryResult is more than 1 { // data is duplicated mark as IGNORE } analysedData.Add(employee); 

当colExistingEmpData没有’Id’的重复值时,这可以正常工作

当colExternalEmpData中存在重复项时,意味着如果两个员工具有与123相同的“ID”,则上述代码仍将使用123 id作为更新标记现有员工,因为它在colExistingEmpData中找到完全匹配,而colExistingEmpData只有一个具有该ID的reocrd。

有没有一种方法可以将员工记录在任何一个来源中重复时标记为“IGNORE”?

我不能使用一个Dictionary对象,我以前曾经使用它,但function却不喜欢这个想法。

问候。

考虑只是将处理后的列表添加到等式中:

 List processed = new List(); 

然后在循环的顶部添加以下代码:

 if (processed.Contains(employee.Id)) { continue; } processed.Add(employee.Id); 

因此, 检查其他列表之前 ,请执行此操作。 这是你做的第一件事,因为你并不关心它是否已被处理过。

假设我正确理解了你的问题,你总是可以通过employeeID对ExternalList进行排序,然后使用while循环,只需使用while循环并跳过员工,而id是相同的。

这是+ – 代码的外观,减少为整数:

 List external = new List() { 1, 2, 2, 5, 1, 3 }; List internalList = new List() { 1, 4, 5, 3 }; external.Sort(); int index = 0; int item = -1; while (index  t == item); } index++; } 

我不知道这是否有用,但为什么不合并这两个列表,并删除重复: –

 var mergedList = list1.Union(list2).ToList(); 

你应该看看这个问题: –

使用linq从两个对象列表创建一个列表

另一种方法是覆盖EqualsGetHashCode并使用.Distinct()

MSDN

上述就是C#学习教程:在C#中比较两个列表中的两个重复列表分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记


推荐阅读
author-avatar
lx比比2502869217
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有