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));