vergleichen Sie alle Zeilen in der DataTable - identifizieren doppelte Datensätze
Möchte ich zum normalisieren von Daten in einem DataTable insertRows
ohne Schlüssel. Zu tun, dass ich benötigen, zu identifizieren und markieren Sie doppelte Einträge, indem Sie Ihre ID (import_id
). Danach wähle ich nur die deutliche lieben. Der Ansatz, den ich denke, ist zu vergleichen, jede Zeile gegen alle Zeilen des DataTable - insertRows
Die Spalten in der DataTable sind nicht zur design-Zeit bekannt, und es gibt keine Schlüssel. Performance-Weise, die Tabelle hätte so viel als 10k bis 20k Platten und etwa 40 Spalten
Wie kann ich dies erreichen, ohne Einbußen bei der Leistung zu viel?
Versuchte ich mit linq, aber ich wusste nicht, wie dynamisch geben Sie die where-Kriterien
Hier, ich bin den Vergleich der ersten und letzten Namen in einer Schleife für jede Zeile
foreach (System.Data.DataRow lrows in importDataTable.Rows) { IEnumerable<System.Data.DataRow> insertRows = importDataTable.Rows.Cast<System.Data.DataRow>(); var col_matches = from irows in insertRows where String.Compare(irows["fname"].ToString(), lrows["fname"].ToString(), true).Equals(0) && String.Compare(irows["last_name"].ToString(), lrows["last_name"].ToString(),true).Equals(0) select new { import_id = irows["import_id"].ToString() }; }
Alle Ideen sind willkommen.
Wie finde ich ähnliche Spaltennamen mithilfe von linq?>meine ähnliche Frage
Ist der Grund für diesen post ist nicht immer Stimmen, weil es die community-wiki?
Ich kann nicht deaktivieren Sie das wiki. Sorry
InformationsquelleAutor |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Weg, um dies getan, ohne die O(n2) Komplexität ist dabei eine Datenstruktur, die effizient implementiert Set-Operationen, insbesondere den Betrieb Enthält. Zum Glück .NET (3.0) enthält die HashSet Objekt, welches das für Sie übernimmt. Um diese zu nutzen, die Sie gehen zu müssen, um ein einzelnes Objekt, welches eine Zeile in der DataTable.
Wenn die DataRow wird nicht funktionieren, empfehle ich die Umwandlung von relevanten Datensätzen in Zeichenfolgen verketten Sie Sie, dann legte Sie diese in das HashSet. Bevor Sie eine Zeile einfügen überprüfen, um zu sehen, ob die HashSet enthält bereits (mit Contains). Wenn Sie es tut, Sie gefunden haben, ein Duplikat.
Edit:
Diese Methode ist O(n).
InformationsquelleAutor
Ich bin nicht sicher, ob ich verstehe die Frage richtig, aber beim Umgang mit dem System.Daten.DataTable die folgenden arbeiten sollten.
Ich habe implementiert diese Methode und die gilt es zu erreichen, was ich Fragen hier. Danke!!! Bin ich weiterhin zu suchen, um eine Lösung, die nutzt eine weniger teuer Ansatz.
InformationsquelleAutor
Bin ich nicht allzu Auskunftsfreudig über LINQ, aber können Sie verwenden .Distinct-operator() verwendet?
http://blogs.msdn.com/charlie/archive/2006/11/19/linq-farm-group-and-distinct.aspx
Deine Frage macht nicht klar, ob Sie brauchen, um zu identifizieren doppelte Zeilen, oder ob Sie nur auf der Suche, um Sie zu entfernen aus der Abfrage. Der Zusatz "Distinct" entfernen würde, die zusätzlichen Instanzen, aber es würde nicht unbedingt sagen, was Sie waren.
InformationsquelleAutor