如果我有两个列表:
List<MyModel> list1;
List<MyModel> list2;
如何创建一个列表 3,其中包含列表 2 中不存在的列表 1 中的所有项目。 我想通过属性字符串 list1 比较每个列表中的项目。名称和列表2。名字。
请注意,list3 不应包含 list1 中的任何项目。
目的是 list1 是原始列表,我想通过将 list3 中的每个项目添加到我的原始列表 1 来使用 list2 中的项目进行更新。我只是不想在更新后有任何重复项。
似乎您的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();
}
}