将所有项添加到列表中,该列表不等于另一个列表中的项

时间:2018-05-14 13:15:46

标签: c#

我有一个清单:

baseList

另一个清单:

relatedList

我想将relatedItems添加到relatedList,但只会添加baseList中尚未包含相同项目的项目。

我想的是:

    foreach (var baseItem in baseList)
    {
         relatedList.AddRange(GetRelatedItems(baseItem)).Except(x => x in baseList);
    }

    foreach (var baseItem in baseList)
    {
         relatedList.AddRange(GetRelatedItems(baseItem)).Except(x => x.id not in baseList);
    }

但我无法弄清楚如何让它发挥作用。

4 个答案:

答案 0 :(得分:3)

尝试这样的事情:

foreach (var baseItem in baseList)
{
    relatedList.AddRange(GetRelatedItems(baseItem)).Except(x => baseList.Where(y => x.id == y.id);
}

或者

foreach (var baseItem in baseList)
{
    relatedList.AddRange(GetRelatedItems(baseItem)).Except(x => baseList.Where(y => x.id != y.id);
}

答案 1 :(得分:1)

您可以将Contains()方法用于此目的,例如

relatedlist.Where(i => !relatedItemsList.Contains(i))

答案 2 :(得分:0)

您可以使用Union和SelectMany linq方法:

relatedList = relatedList.Union(baseList.SelectMany(baseItem => GetRelatedItems(baseItem)));

编辑:抱歉,我太快读了你的问题,并假设relatedList是字符串列表。要对对象使用Union方法,您必须为您的类编写IEqualityComparer。

class MyComparer : IEqualityComparer<MyClass>
{
    public bool Equals(MyClass x, MyClass y)
    {
        return x.id == y.id;
    }

    public int GetHashCode(MyClass item)
    {
        return item.id.GetHashCode();
    }
}

relatedList = relatedList.Union(baseList.SelectMany(baseItem => GetRelatedItems(baseItem)), new MyComparer());

答案 3 :(得分:-1)

调用addRange后,您可以使用relatedList.Distinct().toList()。 Distinct删除重复的元素。希望这会有所帮助:)