1

我使用 except 来查找修改后的对象,但 except 需要一个比较器并且只返回差异。

返回此类结果的最佳算法是什么?

谢谢。

4

1 回答 1

4

据我了解,您有两个KeyValuePair这样的:

List<KeyValuePair<string, string>> list1 = new List<KeyValuePair<string, string>>();
List<KeyValuePair<string, string>> list2 = new List<KeyValuePair<string, string>>();

您想要的是基于匹配键简单地连接两个序列。为此,您可以使用Enumerable.Join. 然后,您只需要使用Where()方法过滤结果:

var result = list2.Join(list1, x => x.Key, y => y.Key, (x, y) => new { x, y })
                  .Where(l => l.x.Value != l.y.Value)
                  .ToList();

或者,作为第二个选项,您可以遍历第二个列表并在第一个列表中获取匹配的元素:

var result = list2.Where(x => list1.Any(y => y.Key == x.Key && y.Value != x.Value))
     .Select(x => new
     {
         NewKVP = new KeyValuePair<string, string>(x.Key, x.Value),
         OldKVP = new KeyValuePair<string, string>(x.Key, list1.Single(z => z.Key == x.Key).Value)
     })
    .ToList();

但是,我更喜欢Join().

于 2015-03-05T13:53:13.510 回答