我有一个清单:
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);
}
但我无法弄清楚如何让它发挥作用。
答案 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删除重复的元素。希望这会有所帮助:)