![](/img/trans.png)
[英]From a list of objects remove all objects where value of a property “colName” matches Any item in a given array “AllCols”
[英]linq remove item from object array where property equals value
如果我有
IEnumberable<Car> list
我想根据汽车的属性从此列表中删除一个项目
我想要的东西:
list.RemoveWhere(r=>r.Year > 2000)
这样的事情存在吗?
我一遍又一遍地这样做,所以我想避免每次复制列表只删除一个项目
聚会很晚,但任何人都会遇到这个问题,这是一个更清洁的解决方案:
MyList.RemoveAll( p => p.MyProperty == MyValue );
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));
}
如果您正在使用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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.