如果我有两个列表:
List<MyModel> list1;
List<MyModel> list2;
如何使用list2中所有不在list1中的项目创建一个list3。 我想通过属性字符串list1.Name和list2.Name比较每个列表中的项目。
请注意,list3不应包含list1中的任何项目。
目的是list1是原始列表,我想通过将list3中的每个项目添加到我的原始list1中来使用list2中的项目进行更新。我只是不想在更新后有任何重复。
答案 0 :(得分:0)
似乎您的list3
只是存储list2
中项目的临时列表。只需使用此:
var list3 = list2.Where(x => !list1.Any(y => x.MyProperty == y.MyProperty));
然后将它们添加到list1
中:
list1.AddRange(list3);
不过,您可以通过简单的循环直接更新list1
。
foreach(var e in list2)
{
if(!list1.Any(x => x.MyProperty == e.MyProperty))
list1.Add(e);
}
您还可以使用Except
来对您的商品执行均等检查。因此,您必须提供一个IEqualityComparer
:
var list3 = list2.Except(list1, new MyComparer());
class MyComparer : IEqualityComparer<MyElementType>
{
public bool Equals(MyElementType x, MyElementType y)
{
return x.MyProperty == y.MyProperty;
}
public int GetHashCode(MyElementType e)
{
return e.MyProperty.GetHashCode();
}
}