我有一个IEnumerable自定义对象类型集合,其中包含JSON格式的字符串属性。我还有一个List集合,我需要使用它来过滤IEnumerable。我想从IEnumerable中删除所有项目,其中string属性包含List集合中的任何字符串值。我可以通过创建一个临时列表并进行一些循环来解决这个问题,但我正在寻找一个更优雅的解决方案,但我还没有成功。
foreach (var faction in excludedFactions)
{
cardsVM.Cards = repository.Cards.ToList()
.RemoveAll(c => c.Factions.Contains(faction));
}
这是我尝试过的一件事。过去两个小时我一直在玩LINQ语句,但我无法使用它。如果有人能指出我正确的方向(适合我的要求的功能),那将是非常值得赞赏的。
答案 0 :(得分:4)
制作HashSet<string>
个被排除的派系,然后使用此套装过滤您的卡片:
var excludedFactionSet = new HashSet<string>(excludedFactions);
cardsVM.Cards = repository.Cards
.Where(c => !excludedFactionSet.Contains(c.Factions))
.ToList();
请注意,也可以直接使用excludedFactions
。但是,使用HashSet<string>
会使Contains(f)
检查工作的时间是恒定的,而不是线性的。