linq удалить элемент из массива объектов, где свойство равно значению - PullRequest
11 голосов
/ 24 июля 2010

Если у меня есть

IEnumberable<Car> list

и я хочу удалить элемент из этого списка на основе свойства автомобиля

, я хочу что-то вроде:

list.RemoveWhere(r=>r.Year > 2000)

существует ли что-то подобное?

Я делаю это снова и снова, поэтому я хочу избегать копирования списка каждый раз, чтобы просто удалить один элемент

Ответы [ 3 ]

13 голосов
/ 24 июля 2010

IEnumberable неизменен, но вы можете сделать что-то вроде этого:

list = list.Where(r=>r.Year<=2000)

или написать метод расширения:

public static IEnumerable<T> RemoveWhere<T>(this IEnumerable<T> query, Predicate<T> predicate)
{ 
    return query.Where(e => !predicate(e));
}
11 голосов
/ 17 сентября 2015

Очень поздно на вечеринку, но для любого, кто столкнется с этой проблемой, вот более чистое решение:

MyList.RemoveAll( p => p.MyProperty == MyValue );
4 голосов
/ 24 июля 2010

Если вы работаете с IEnumerable<T>, как насчет Где?

list = list.Where(car => car.Year <= 2000);

Если вы работаете с ICollection<T> и вы не просто получаете отфильтрованный результат, но действительно намереваетесь манипулировать исходной коллекцией,Вы можете создать собственное расширение для коллекции:

  public static class CollectionExtensions {
     public static ICollection<T> RemoveWhere<T>(this ICollection<T> collection, Func<T, bool> predicate) {
        List<T> toRemove = collection.Where(item => predicate(item)).ToList();
        toRemove.ForEach(item => collection.Remove(item));
        return collection;
     }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...