我有两个列表如下:
List<EmpData> colExistingEmpData;
List<EmpData> colExternalEmpData;
每个人都有具有相同身份证明的员工记录。 我知道这听起来很奇怪,但这是我现在所处的真实情况!
对于基于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只有一个reocrd那个。
当员工记录在任何一个来源中重复出现时,是否有一种方式可以将其记录为“IGNORE”?
我不能使用一个Dictionary对象,我以前曾经使用它,但功能却不喜欢这个想法。
问候。
答案 0 :(得分:2)
考虑将处理后的列表添加到等式中:
List<int> processed = new List<int>();
然后在循环的顶部添加以下代码:
if (processed.Contains(employee.Id)) { continue; }
processed.Add(employee.Id);
所以你在之前检查另一个列表。这是你做的第一件事,因为你并不在乎它是否已被处理过。
答案 1 :(得分:1)
假设我正确理解你的问题,你总是可以通过employeeID对ExternalList进行排序,然后使用while循环,只需使用while循环并跳过员工,而id是相同的。
这是+ - 代码的外观,减少为整数:
List<int> external = new List<int>() { 1, 2, 2, 5, 1, 3 };
List<int> internalList = new List<int>() { 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++;
}
答案 2 :(得分:0)
我不知道这是否会有所帮助,但为什么不合并这两个列表,并删除重复项: -
var mergedList = list1.Union(list2).ToList();
你应该看看这个问题: -
答案 3 :(得分:0)
另一种方法是覆盖Equals
和GetHashCode
并使用.Distinct()