Linq удаляет элемент из массива объектов, где свойство равно значению
Если у меня есть
IEnumberable<Car> list
и я хочу удалить элемент из этого списка на основе свойства автомобиля
Мне нужно что-то вроде:
list.RemoveWhere(r=>r.Year > 2000)
существует ли что-то подобное?
Я делаю это снова и снова, поэтому я хочу избежать копирования списка каждый раз, чтобы просто удалить один элемент
Ответы
Ответ 1
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));
}
Ответ 2
Очень поздно для вечеринки, но для кого-то это столкнется, вот более чистое решение:
MyList.RemoveAll( p => p.MyProperty == MyValue );
Ответ 3
Если вы работаете с IEnumerable<T>
, как насчет Where?
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;
}
}