繁体   English   中英

使用 RemoveAll 从列表中删除项目

[英]Removing item from list with RemoveAll

我正在尝试使用 lambda 表达式根据 object 中的值从列表中删除某个 object。 这是我的 lambda:

ChartAttributes.ToList().RemoveAll(a => a.AttributeValue.Contains("PILOT"));

这是 ChartAttributes 列表

IList<IChartAttribute> ChartAttributes 

这是上面列表中包含的 object ChartAttribute

    public virtual string AttributeKey { get; set; }       
    public virtual string AttributeValue { get; set; }        
    public virtual int ChartAttributeId { get; set; }        
    public virtual int ChartSpecificationId { get; set; }

有一个图表属性,其 AttributeKey 设置为“PILOT”。 但这永远不会被删除。 我究竟做错了什么?

谢谢

您的代码采用IEnumerable ,将其所有元素复制到列表中,然后从该副本中删除项目。 IEnumerable未修改。

尝试这个:

var list =  ChartAttributes.ToList();
list.RemoveAll(a => a.AttributeValue.Contains("PILOT"));
ChartAttributes = list;

编辑

实际上是一种更好的方法,无需调用ToList

ChartAttributes = ChartAttributes.Where(a => !a.AttributeValue.Contains("PILOT"));

您对.ToList()的调用会创建一个新列表,并且您最终会从该列表中删除该项目。

无论ChartAttributes是什么,您都不会触及其中的内容。

基本上你正在这样做:

var newList = ChartAttributes.ToList();
newList.RemoveAll(...);

如果您此时要检查newList的内容,您会注意到您的对象已被删除,但 ChartAttributes,无论是哪种类型,仍然存在这些对象。

您必须直接从 ChartAttributes 中删除对象,但由于您没有说明是哪种类型,因此我无法为您提供如何执行此操作的示例。

如果您需要删除项目并保存到数据库,您可以尝试以下示例代码:

foreach (var x in db.myEntities.Where(a => a.AttributeValue.Contains("PILOT")))
  db.myEntities.Remove(x);
db.SaveChanges();

它不使用 RemoveAll,但它是另一种保存内容的选项。

我有一个类似的问题,而是做了一个演员(因为我的属性设置器是内部的):

((List<IChartAttribute>)ChartAttributes).RemoveAll(a => a.AttributeValue.Contains("PILOT"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM