在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 < external.Count) { if (external[index] != item) { item = external[index]; internalList.FindAll(t => t == item); } index++; } 

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

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

你应该看看这个问题: –

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

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

MSDN