根据string属性是否包含另一个List <string>的任何字符串值,过滤IEnumerable <object>

时间:2018-03-11 22:31:19

标签: c# linq

我有一个IEnumerable自定义对象类型集合,其中包含JSON格式的字符串属性。我还有一个List集合,我需要使用它来过滤IEnumerable。我想从IEnumerable中删除所有项目,其中string属性包含List集合中的任何字符串值。我可以通过创建一个临时列表并进行一些循环来解决这个问题,但我正在寻找一个更优雅的解决方案,但我还没有成功。

foreach (var faction in excludedFactions)
{
    cardsVM.Cards = repository.Cards.ToList()
        .RemoveAll(c => c.Factions.Contains(faction));
}

这是我尝试过的一件事。过去两个小时我一直在玩LINQ语句,但我无法使用它。如果有人能指出我正确的方向(适合我的要求的功能),那将是非常值得赞赏的。

1 个答案:

答案 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)检查工作的时间是恒定的,而不是线性的。