C# 比较两个列表之间的特定项属性



如果我有两个列表:

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();
}
}

相关内容

  • 没有找到相关文章

最新更新