作者:lx比比2502869217 | 来源:互联网 | 2023-08-31 13:40
在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从两个对象列表创建一个列表
另一种方法是覆盖Equals
和GetHashCode
并使用.Distinct()
MSDN
上述就是C#学习教程:在C#中比较两个列表中的两个重复列表分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记