我有一个按预期工作的查询。如果mastercollection不存在MyCollection中存在的相应AssocaitedProp,则从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;
和 列出MyCollection
如何获得相同的结果。即如果masterCollection没有MyCollection中存在ClassX值的任何项目,则从MyCollection中删除所有项目
我知道解释不够明确。
答案 0 :(得分:3)
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,因为它们是搜索速度最快的集合。