2017-12-15 22 views
0

2つの大きなExcelファイルがあります。 linqtoexcelを使用して、これらのExcelファイルの行をリストに入れることができます。問題は、最初のリスト内のあるオブジェクトの文字列をに検索する必要があるということです。もう1つの文字列の中に別の文字列が含まれていたり見つからなかったりします。私は次のことを試していたが、各リストは70,000以上のアイテムがあるので、このプロセスは長く続いている。Linq内のContainsを使用して大きなリスト内で検索

Anyステートメントを使用しようとしましたが、結果を取得できませんでした。アイデアがあれば教えてください。

List<ExcelOne> exOne = new List<ExcelOne>(); 
List<ExcelTwo> exTwo = new List<ExcelTwo>(); 

最初のリストと2番目のリストを作成でき、リストにオブジェクトがあることを確認できます。ここで私はマッチングを見つけるためにリストをどのように処理するのか考えました。マッチングが見つかったら、新しいクラスを作成して新しいリストに追加したいと思います。

List<NewFormRow> rows = new List<NewFormRow>(); 

     foreach (var item in exOne) 
     { 
      //I am going through each item in list one 
      foreach (var thing in exTwo) 
      { 
        //I now want to check if exTwo.importantRow has or 
        //contains any part of the string from item.id 
       if (thing.importantRow.Contains(item.id)) 
       { 
        NewFormRow adding = new NewFormRow() 
        { 
         Idfound = item.id, 
         ImportantRow = thing.importantRow 
        }; 
        rows.Add(adding); 
        Console.WriteLine("added one"); 
       } 
      } 

この問題を回避する方法が分かっている場合は、お気軽にお申し込みください。ありがとうございました。

答えて

0

この部分文字列の手法を改善するのは難しいです。あなたがここでそれをしなければならないのかという疑問があります。あなたはリストを満たしたところでそれをすることはできませんか?その後、この追加ステップは必要ありません。

しかし、多分あなたは、このLINQクエリをより読み見つける:

List<NewFormRow> rows = exOne 
    .SelectMany(x => exTwo 
     .Where(x2 => x2.importantRow.Contains(x.id)) 
     .Select(x2 => new NewFormRow 
     { 
      Idfound = x.id, 
      ImportantRow = x2.importantRow 
     })) 
    .ToList(); 
+0

は助けてくれてありがとう。はい、これははるかにクリーンです。それでも時間は同じくらいですが、エクセルファイルには約70k行ほどの開発者がいるわけではありません。再度、感謝します – DevDavid

関連する問題