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

时间:2019-02-17 17:47:40

标签: c# list compare

如果我有两个列表:

List<MyModel> list1;
List<MyModel> list2;

如何使用list2中所有不在list1中的项目创建一个list3。 我想通过属性字符串list1.Name和list2.Name比较每个列表中的项目。

请注意,list3不应包含list1中的任何项目。

目的是list1是原始列表,我想通过将list3中的每个项目添加到我的原始list1中来使用list2中的项目进行更新。我只是不想在更新后有任何重复。

1 个答案:

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