我有以下场景:
列表 1 有 20 个 TItem 类型的项目,列表 2 有 5 个相同类型的项目。 list 1 已包含 list 2 中的项目,但处于不同的状态。我想用 list 2 中的项目覆盖 list 1 中的 5 项。
我认为联接可能有效,但我想覆盖列表 1 中的项目,而不是将它们联接在一起并产生重复项。
有一个唯一的key可以用来查找List 1中哪些item要覆盖这个key是int类型
请您参考如下方法:
您可以使用内置的 Linq .Except() 但它需要一个 IEqualityComparer 所以使用 a fluid version .Except() 而不是。
假设一个对象具有您指定的整数键:
public class Item
{
public int Key { get; set; }
public int Value { get; set; }
public override string ToString()
{
return String.Format("{{{0}:{1}}}", Key, Value);
}
}
原始对象列表可以与更改后的对象列表合并,如下所示:
IEnumerable<Item> original = new[] { 1, 2, 3, 4, 5 }.Select(x => new Item
{
Key = x,
Value = x
});
IEnumerable<Item> changed = new[] { 2, 3, 5 }.Select(x => new Item
{
Key = x,
Value = x * x
});
IEnumerable<Item> result = original.Except(changed, x => x.Key).Concat(changed);
result.ForEach(Console.WriteLine);
输出:
{1:1}
{4:4}
{2:4}
{3:9}
{5:25}
