2017-10-18 93 views
0

我有一個存儲列表實例的列表。我想從與IdName子列表中刪除對象==「149」刪除列表中的列表

 List<Product> productList = new List<Product>() 
     { 
      new Product() 
      { 
       Id = 1, 
       Model = "Phone", 
       TypeProd = new CheckTypes() { ChTypes = new List<CHType> { new CHType() { Id = 8, IdName = "261"}, new CHType() {Id = 9 , IdName = "149" } } } 

      }, 
      new Product() 
      { 
       Id = 1, 
       Model = "Printer", 
       TypeProd = new CheckTypes() { ChTypes = new List<CHType> { new CHType() { Id = 8, IdName = null}, new CHType() {Id = 8 , IdName = "261" } } } 
      } 
     }; 

     var pr = productList.Select(s => s.TypeProd).Where(w => w.ChTypes.Any(a => a.IdName != null && a.IdName.Contains("149"))).ToList(); 
     // I 
     var pr0 = pr.Select(s => s.ChTypes).Where(w => w.Any(a => a.Id == 9)).ToList(); 
     // II 
     var pr1 = pr.Select(s => s.ChTypes).Except(pr0); 
     // III 
     pr.Select(s=>s.ChTypes).ToList().RemoveAll(a => a.Any(item => item.IdName.Contains("149"))); 
     foreach (var item in pr) 
     { 
      foreach (var item2 in item.ChTypes) 
      { 
       Console.WriteLine(item2.IdName); 
      } 

      Console.WriteLine("End"); 
     } 

     Console.ReadKey(); 

我可以刪除整個序列,但如何從序列中刪除一個元素?

回答

2

使用Remove()刪除給定項目,或使用RemoveAt()刪除給定位置的項目。

0

我認爲,你比它需要更復雜。您只需循環所有的ChTypesList並刪除不需要的ChType。它可以通過下面的代碼很容易地完成

foreach (var chType in productList.Select(prod => prod.TypeProd.ChTypes)) 
    chType.RemoveAll(c => c.IdName != null && c.IdName.Contains("149")); 

你所有的LINQprpr0pr1pr.Select().ToList().RemoveAll()都是不必要的。此外,在您當前的代碼中,您僅拾取CHType與​​,不確定這是錯誤還是代碼正確,但是您的問題未能指定。下面

由於OP堅持避免foreach是做

productList.Select(prod => prod.TypeProd.ChTypes) 
      .Select(chType => chType.RemoveAll(c => c.IdName != null && c.IdName.Contains("149"))) 
      .ToList(); 
+0

非常感謝你的一個LINQ方式,但所有的興趣是LINQ。使用循環,這很容易做 – Tibomso

+0

@Tibomso你能解釋爲什麼你需要使用'LINQ'從嵌套列表中刪除元素嗎? 'LINQ'通常用於提取(認爲select in sql)信息,而不是改變它們。 – Vikhram