带有动态 OR 语句的 C# Linq RemoveAll

C# Linq RemoveAll with dynamic OR statement

我想知道是否有办法动态创建这部分。或者,这有可能吗?在这种情况下使用 "Contians" 将不起作用。

(x.Letter!= "a") && (x.Letter!= "b") && (x.Letter!= "e")

"a"、"b"、"c" 将使用 for 循环从 ListBox 中生成。列表框中可以有任意数量的项目。这就是为什么这必须是动态的。

MyList.RemoveAll(x => (x.Letter != "a") && (x.Letter!= "b") && (x.Letter!= "e"));

您要确保该列表中的任何内容都不等于 x.Letter,因此我会构建您要先删除的值列表,然后再使用它。

我不知道你的 ListBox 长什么样,但我们假设你可以像这样从中获取字符串列表:

List<string> stuffToRemove = myListBox.Items.Select(x => x.Value).ToList();

您应该能够在 LINQ 语句中使用该字符串列表:

MyList.RemoveAll(x => stuffToRemove.Contains(x.Letter));

如果您实际上打算保留 ListBox 中的内容,则相应地进行调整:

List<string> stuffToKeep = myListBox.Items.Select(x => x.Value).ToList();

MyList.RemoveAll(x => !stuffToKeep.Contains(x.Letter));

你不需要让它动态,因为你的条件结构是非常规则的:你检查所有项目的遏制。因此你可以这样做:

var check = new List<string>(itemsFromListBox);
MyList.RemoveAll(x => check.All(s => x.Letter != s));