使用动态OR语句C#Linq RemoveAll

时间:2018-03-14 22:17:03

标签: c# linq removeall

我需要知道是否有办法动态创建这个部分。或者,它甚至可能吗?使用“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"));

2 个答案:

答案 0 :(得分:3)

您正在尝试确保该列表中的任何内容都不等于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));

答案 1 :(得分:1)

您不需要将其设置为动态,因为您的条件结构非常规则:您检查对所有项目的遏制。因此你可以这样做:

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