2017-12-15 4 views
0

finden Ich habe zwei große Excel-Dateien. Ich bin in der Lage, die Zeilen dieser Excel-Dateien in eine Liste mit Linqtoexcel zu bekommen. Das Problem ist, dass ich einen String von einem Objekt innerhalb der ersten Liste zu finden muss, wenn es innerhalb einer anderen Zeichenfolge in einem Objekt der zweiten Liste ist oder in einer anderen Zeichenfolge enthalten ist. Ich habe Folgendes versucht, aber der Prozess dauert zu lange, da jede Liste über 70.000 Elemente umfasst.In großen Liste mit Contains in Linq

Ich habe versucht, eine Any-Anweisung, aber nicht in der Lage, Ergebnisse zu ziehen. Wenn Sie Ideen haben, teilen Sie sie bitte mit.

Ich bin in der Lage, die erste Liste und zweite Liste zu erstellen und kann überprüfen, ob Objekte in der Liste sind. Hier war mein Gedanke, wie ich die Listen durcharbeiten würde, um Übereinstimmungen zu finden. Beachten Sie, dass ich, sobald ich die Übereinstimmung gefunden habe, eine neue Klasse erstellen und sie zu einer neuen Liste hinzufügen möchte.

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

Wenn Sie einen schnelleren Weg kennen, teilen Sie bitte. Vielen Dank.

Antwort

0

Es ist schwierig, diesen Teilstring-Ansatz zu verbessern. Die Frage ist, ob Sie es hier tun müssen. Kannst du es nicht tun, wo du die Listen gefüllt hast? Dann brauchen Sie diesen zusätzlichen Schritt nicht.

aber vielleicht haben Sie diese LINQ-Abfrage lesbarer finden:

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

Sie für die Hilfe danken. Ja, das ist viel sauberer. Immer noch ungefähr die gleiche Zeit, aber es gibt nicht viel Entwickler kann über 70k Zeilen in einer Excel-Datei tun. Danke noch einmal – DevDavid