Если Lines - List<T>
, то самый простой способ - просто написать:
cart.Lines.RemoveAll(x => x.Quantity == 0);
Если Lines равен IEnumerable<T>
, вы можете выбрать отрицательный (как предложил Влад) - вы также можете изменить список, используя ToList()
, а затем сделать RemoveAll()
, но это будет излишним.
cart.Lines = cart.Lines.Where(x => x.Quantity != 0);
UPDATE:
Так как вы сказали, что Lines - это IList<T>
, вам нужно выбрать негатив и преобразовать в список, например:
cart.Lines = cart.Lines.Where(x => x.Quantity != 0).ToList();
Или вы можете преобразовать в List<T>
, используя ToList()
, затем позвонить RemoveAll()
и затем сохранить обратно:
var temp = cart.Lines.ToList();
temp.RemoveAll(x => x.Quantity != 0);
cart.Lines = temp;
Между прочим, в качестве FYI я рассчитывал как создание списка удалений, так и затем Remove()
против выбора отрицательного значения с помощью Where()
и вызова ToList()
, и комбинация Where / ToList была намного быстрее, что имеет смысл, поскольку оба выделяют память , но Where / ToList значительно меньше тасует память.
Вот время для удаления всех четных чисел из списка в 100 000 дюймов:
- Удаление всех событий, создание списка удаления и вызов Remove () для каждого заняло: 3921 мс
- Удаление всех событий с помощью Where () на отрицательном, а затем ToList () заняло: 2 мс
- Удаление всех событий с помощью ToList () на оригинале, затем RemoveAll () заняло: 1 мс