2017-10-22 19 views
0

私はリストのリストを持っている:リスト内のリストの比較

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" 
       } 
      } 
     } 
    } 
}; 

そして私はstring[]IdName要素を比較することによって、このリストの最初の項目を取得したい:

string[] arrStr = new string[] { "261", "149" }; 

どうやってこれを改善できますか? foreachを使用し、配列の値をとるテンポラリオブジェクトを作成して、と交差してを使用して比較しようとしました。

+0

アルゴリズムの完全な例を教えてください。 – palasjir

+0

arrStrをHashSet として作成します。それはあなたが高速検索を行うことができます。 –

答えて

0

あなたはLINQとかなり単純にそれを行うことができます:

var product = productList 
    .FindAll(x => x.TypeProd.ChTypes 
        .All(y => arrString.Contains(y.IdName)); 

これは、あなたにそのTypeProd.ChTypes要素全てarrStringにあるすべての製品を提供します。
パフォーマンスを向上させるには、arrStringHashSet<string>に変更します。

+0

良い例。しかし、あなたは最初の要素を返します、私はおそらくそれを正しく置かなかったが、私はこの例では最初の要素を取得したいが、もっと多くの要素が存在する可能性がある。私は配列の値を含むすべての要素を探したい。 – Tibomso

+0

これは、 'FirstOrDefault'を' Where(...) 'に変更するだけです。 –

+0

あなたはIdName = "261"を意味します。261 – Eldho

関連する問題