gpt4 book ai didi

c# - 使用 linq 从集合中删除项目

转载 作者:行者123 更新时间:2023-11-30 22:09:12 24 4
gpt4 key购买 nike

我有一个按预期工作的查询。如果 mastercollection 没有相应的 AssocaitedProp 存在于 MyCollection 中,则从 MyCollection 中删除该项目

public class classB
{
public classX AssociatedProp { get; set; }
}

List<classX> MyCollection;
List<classB> masterCollection;

MyCollection.RemoveAll(x =>
MyCollection.Except(
(from n in masterCollection
select n.AssociatedProp).Distinct()).ToList().Contains(x)
);

此查询将从 MyCollection 中删除所有不在 masterCollection 中的项目。

现在我已经将 MyCollection 修改为 classC 的集合

public class classC
{
bool flag { get; set; }
classX myObj { get; set; }
}

List<classC> myCollection;
List<classB> masterCollection;

和列出我的收藏

我怎样才能达到相同的结果。即如果 masterCollection 中没有任何具有 ClassX 值的项目存在于 MyCollection 中,则从 MyCollection 中删除所有项目

我知道解释不够清楚。

最佳答案

var toKeep = new HashSet(masterCollection.Select(x => x.AssociatedProp));

foreach(var x in myCollection.Where(i => toKeep.Contains(i.myObj) == false).ToList())
{
myCollection.Remove(x);
}

您想将搜索列表带到 lambda 之外,否则您需要为每个项目重新创建它。您还需要一个 HashSet,因为它们是搜索速度最快的集合。

关于c# - 使用 linq 从集合中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21691572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com