linq удаляют объект из объектного массива, где свойство равняется значению

Если я имею

IEnumberable<Car> list

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

я хочу что-то как:

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

что-то вроде этого существует?

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

12
задан leora 24 July 2010 в 14:22
поделиться

2 ответа

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));
}
13
ответ дан 2 December 2019 в 05:03
поделиться

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

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

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

  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;
     }
  }
4
ответ дан 2 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: