[英]Add all items to a list that are not equal to items in another list
我有一个清单:
baseList
还有另一个清单:
relatedList
我想将relatedItems
添加到relatedList
,但只添加那些在baseList
不存在相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);
}
但是我不知道如何使它工作。
尝试这样的事情:
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);
}
您可以为此目的使用Contains()
方法,例如
relatedlist.Where(i => !relatedItemsList.Contains(i))
您可以使用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());
您可以在调用addRange之后使用relatedList.Distinct().toList()
。 Distinct删除重复的元素。 希望这可以帮助 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.