2017-10-18 9 views
0

リストのインスタンスを格納するリストがあります。私は、全体のシーケンスを削除してもらう「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(); 

== IdNameでサブリストからオブジェクトを削除したいのですが、どのようにシーケンスから一つの要素を削除するには?

答えて

2

Remove()を使用して特定のアイテムを削除するか、RemoveAt()を使用して特定の場所のアイテムを削除します。

0

私はあなたが必要以上に複雑に思っています。 ChTypesListをループし、不要なChTypeを削除するだけです。これは、簡単に以下のコードによって達成することができprpr0pr1pr.Select().ToList().RemoveAll()ため

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

あなたのすべてのLINQ行はすべて不要です。また、現在のコードでは、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'は通常、情報を抽出する(SQLで考えることを考える)ために使用され、それらを変更することはありません。 – Vikhram

関連する問題