簡體   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