C# Linq RemoveAll с динамическим оператором OR

Мне нужно знать, есть ли способ создать эту часть динамически. Или это вообще возможно? Использование "Contians" не будет работать в этой ситуации.

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

"A", "b", "c" будут генерироваться из ListBox с использованием цикла for. В списке может быть любое количество элементов. Вот почему это должно быть динамичным.

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

2 ответа

Решение

Вам не нужно делать его динамичным, потому что структура вашего состояния очень регулярна: вы проверяете содержание по всем элементам. Следовательно, вы можете сделать это так:

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

Вы пытаетесь убедиться, что ничто в этом списке не равно 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));
Другие вопросы по тегам