2013-02-02 97 views
2

我正在收集。我需要從集合中移除一個項目並使用過濾/移除的集合。從清單收藏中刪除項目不刪除

這裏是我的代碼

public class Emp{ 
    public int Id{get;set;} 
    public string Name{get;set;} 
} 

List<Emp> empList=new List<Emp>(); 
Emp emp1=new Emp{Id=1, Name="Murali";} 
Emp emp2=new Emp{Id=2, Name="Jon";} 
empList.Add(emp1); 
empList.Add(emp2); 

//Now i want to remove emp2 from collection and bind it to grid. 
var item=empList.Find(l => l.Id== 2); 
empList.Remove(item); 

問題甚至去除項目後,我的收藏仍顯示計數2
可能是什麼問題?

編輯:

原始代碼

var Subset = otherEmpList.FindAll(r => r.Name=="Murali"); 

    if (Subset != null && Subset.Count > 0) 
    { 
    foreach (Empl remidateItem in Subset) 
    { 
     Emp removeItem = orginalEmpList.Find(l => l.Id== 
              remidateItem.Id); 
        if (removeItem != null) 
        { 
         orginalEmpList.Remove(remidateItem); // issue here 

        } 
     } 
    } 

這是工作的罰款。在實際的代碼中,我刪除了remediateItem。 remediateItem是 同類型,但它屬於不同的集合。

+0

你能告訴我們你的實際代碼嗎?事實上,這不會被編譯。你提供了什麼(當它是固定的),工作。 –

+1

您是否將問題從集合中移除或更新UI?也許該項目已成功從集合中刪除,但UI未更新。 –

+0

是的。當我修復編譯錯誤時,運行代碼似乎可以工作。 –

回答

6

你傳入的對象可能是工作Remove這是不是在你的列表中,您試圖除去但副本你對象其他列表,這就是爲什麼他們不被刪除,請使用List.RemoveAll方法來傳遞謂詞。

lst.RemoveAll(l => l.Id== 2); 

如果要刪除許多IDS在一些其他收藏品一樣IDS

int []ids = new int[3] {1,3,7}; 
lst.RemoveAll(l => ids.Contains(l.Id)) 
+0

是不是這將刪除所有的名單,但他只想刪除一個 –

+0

我已經給出了條件內,它將只刪除滿足作爲參數給出的條件。 – Adil

+0

我需要根據其他集合過濾很多。現在使用一個循環。更新的代碼。還有其他的方法嗎? –

0

你寫錯了你的lambda。它應該是這樣

var item=empList.Find(l => l.Id== 2); 
+0

對不起,我更新了問題。我錯誤地在這裏輸入。但在代碼中,它是正確的,並建立 –

2
int removeIndex = list.FindIndex(l => e.Id== 2); 
if(removeIndex != -1) 
{ 
    list.RemoveAt(removeIndex); 
} 

試試這個你

0

您粘貼此原代碼的陣列,完美的作品。它相應地刪除項目。

List<Emp> empList = new List<Emp>(); 
Emp emp1 = new Emp { Id = 1, Name = "Murali" }; 
Emp emp2 = new Emp { Id = 2, Name = "Jon" }; 
empList.Add(emp1); 
empList.Add(emp2); 

//Now i want to remove emp2 from collection and bind it to grid. 
var item = empList.Find(l => l.Id == 2); 
empList.Remove(item);