我比较两个列表,看一个是否包含另一个列的值,反之亦然:
List<customer> NotOnLocal =
AllServer.Where(p => !AllLocal.Any(p2 => p2.Reference == p.customerNumber))
.ToList();
List<ConnectCustomer> NotOnServer =
AllLocal.Where(p => !AllServer.Any(p2 => p2.customerNumber == p.Reference))
.ToList();
这似乎工作得很好但是每个对象中有超过100,000个对象变得有点慢。有没有人知道是否有更有效的方法进行比较并返回相应的列表?
答案 0 :(得分:2)
您可以使用散列集(假设您正在比较字符串)以快速检查某些值是否已设置(给出O(1)复杂度而不是O(N)):
var serverCustomerNumbers = new HashSet<string>(AllServer.Select(c => c.customerNumber));
var localReferences = new HashSet<string>(AllLocal.Select(c => c.Reference));
现在,如果您需要获得整个客户对象
List<customer> NotOnLocal =
AllServer.Where(c => !localReferences.Contains(c.customerNumber));
或者您可以使用设置操作来获取所需的客户编号
var notLocalCustomerNumbers = serverCustomerNumbers.Except(localReferences);
答案 1 :(得分:-1)
这个问题进入了集理论的数学领域: https://en.wikipedia.org/wiki/Set_theory 具体来说,一个交叉点: https://en.wikipedia.org/wiki/Intersection_(set_theory)
除了找到那些维基百科Artikels之外,我不知道这是不幸的。
您可以通过制作检查缓动器来计算速度。但是看起来你在整数上是匹配的(customerNumber听起来像一个整数候选者)。