我从函数中获得了两个集合:
IEnumerable<InventoryItem> inventoryItems = get();
IEnumerable<InventoryItem> relatedItems = get();
我想为每个库存项目分配相关项目。但是,相关项目不能与库存项目本身匹配。含义库存物品不能用于相关物品。
我试图以这种方式跳过集合中的重叠元素:
foreach (var item in inventoryItems)
{
InventoryItem item1 = item;
relatedItems.SkipWhile(x => x.RelatedItems.Contains(item1)).ForEach(i => item1.RelatedItems.Add(i));
Save(item);
}
这似乎不起作用。你们中的任何一个Linq用户都有更好的建议。
我遇到的问题是SkipWhile(x => x.RelatedItems.Contains(item1))
部分。另一部分在匹配项目时起作用,无论它们是否重叠
答案 0 :(得分:0)
Where
应该过滤掉您不需要的唯一项目(请注意,可能需要使用检查项目标识的其他条件替换co !=
的comapison“
item1.RelatedItems = relatedItems
.Where(x => !x.RelatedItems.Any(r => r!= item1)).ToList();
答案 1 :(得分:0)
试试这个:
public IEnumerable<T> GetNotMatchingElements<T>(IEnumerable<T> collection1, IEnumerable<T> collection2)
{
var combinedCollection = collection1.Union(collection2);
var filteredCollection = combinedCollection.Except(collection1.Intersect(collection2));
return filteredCollection;
}
答案 2 :(得分:0)
不确定我完全理解,但如果我这样做,这应该有效:
foreach (var invItem in inventoryItems)
{
invItem.RelatedItems = relatedItems
.Where(relItem => !relItem.RelatedItems.Contains(invItem)));
Save(invItem);
}