【问题标题】:Comparing 2 lists from different sources in C#在 C# 中比较来自不同来源的 2 个列表
【发布时间】:2011-04-15 16:55:12
【问题描述】:

我的程序是一个同步程序,它每 2 分钟将数据从源 A 同步到源 B - 现在它无论如何都会添加新行,但显然这对于​​生产环境并不理想,所以我希望能够检查查看源 A 中的行是否与源 B 中的行相同(来自最近的同步)。如果是,请不要执行此同步。

所以我定义了一个结构,其中包含所有存储的字段(除了任何不会在源之间匹配的 PK 字段),并且在执行同步时,而不是直接同步到源 B,我创建了一个结构列表并将结果放在那里。然后我创建一个该结构列表的新实例,并将来自 Source B 的最新同步结果放入其中。

所以理论上,如果自上次同步以来没有任何变化,那么这两个列表应该是相同的,除了顺序。但是我该如何比较这两个列表呢?

【问题讨论】:

  • 是什么使对象相同。它们是否需要是内存中的同一个对象,还是取决于内容?
  • 您是否定义了列表中的对象类别?
  • 对不起,内容。实际的对象会有所不同,但内容会完全一样
  • 这两个列表有多大,如果您将它们并排放置在屏幕上,您能否按照任何可以排列它们的方式对它们进行排序?
  • 列表会相对较短 - 我猜最多大约 100 个,通常要少得多。我带来的每一行都有一个唯一的 ID,它会被转移到源 B - 所以我可以在那里订购

标签: c# linq


【解决方案1】:

我不清楚这个问题到底是什么。

但是,如果您需要使用列表而不考虑顺序,则可以使用Enumerable 中的基于集合的操作。如果您有集合oldnew,则可以使用new.Except(old) 获取新集合中但不在原始集合中的元素列表(请参阅MSDN documentation for Except)。

如果要检查两个集合是否包含完全相同的元素,那么两个差异集(old.Except(new)new.Except(old))的大小都应该为零。 (意味着没有添加任何元素,也没有删除任何元素)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多