C# linq从属性等于值的对象数组中删除项

C# linq从属性等于值的对象数组中删除项,c#,linq,collections,C#,Linq,Collections,如果我有 IEnumberable<Car> list 这样的东西存在吗 我一遍又一遍地这样做,因此我希望避免每次复制列表时只删除一项如果您使用的是IEnumerable,那么在哪里呢 list = list.Where(car => car.Year <= 2000); list=list.Where(car=>car.Year谓词(item)).ToList(); ForEach(item=>collection.Remove(item)); 回收; } } IE

如果我有

IEnumberable<Car> list
这样的东西存在吗


我一遍又一遍地这样做,因此我希望避免每次复制列表时只删除一项

如果您使用的是
IEnumerable
,那么在哪里呢

list = list.Where(car => car.Year <= 2000);
list=list.Where(car=>car.Year谓词(item)).ToList();
ForEach(item=>collection.Remove(item));
回收;
}
}

IEnumerable
是不可变的,但您可以这样做:

list = list.Where(r=>r.Year<=2000)
list=list.Where(r=>r.Year!谓词(e));
}

派对很晚,但如果有人遇到这个问题,这里有一个更干净的解决方案:

MyList.RemoveAll( p => p.MyProperty == MyValue );

它是一个
列表
还是仅仅是一个
IEnumerable
?@ooo IEnumerable是不可变的,因此您不能简单地添加或删除项,这是不可能的。当然,您可以只使用一个列表,但不可能说这是否会更快。如果您反复这样做,请记住延迟执行。这是一个很好的解决方案,但IEnumerable没有此方法。您必须首先确保集合是列表类型。
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));
}
MyList.RemoveAll( p => p.MyProperty == MyValue );