[英]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.