Hallo miteinander,
ich arbeite derzeit an einem Konzept, um folgendes Szenario umzusetzen :
Ich habe 4 DataTables (ausgelesen aus CSVs und HTML-Tabellen), wovon 3 mindestens mehrere 10.000, später sicher auch mehrere 100.000 Zeilen oder mehr enthalten. Nun muss ich diese DataTables miteinander verknüpfen. Am Ende will ich dann möglichst wieder eine DataTable haben, zumindest muss es ganz am Ende in einer Excel-Tabelle landen - dafür habe ich bereits Methoden, um DataTables zu schreiben.
Dabei gibt es nicht nur die Bedingung, dass mehrere Spalten einer Tabelle mit denen einer anderen übereinstimmen müssen, was soweit ich mich bis jetzt belesen habe, mit "DataRelations" ginge. Es kann auch in einer Zelle ein * stehen, welcher dann wiederum für jeglichen Wert einer Vergleichszelle der anderen Tabelle als "Match" stehen muss. Die meisten verglichenen Werte sind zudem Strings. LINQ-Joins unterstützen leider auch keine AND oder OR-Operationen.
Das Programm ist jetzt nicht sonderlich zeitkritisch (soll ein einmal wöchentlich erstellter Report werden), aber trotzdem möchte ich den Zeitaufwand zum Verknüpfen der Tabellen möglichst gering halten. Ich hatte jetzt schon überlegt, das ganze durch Verschachtelung von Dictionaries oder anderweitig mit gehashten Werten zu machen. Das würde dann erst einen Durchlauf aller Tabellen zum Erstellen der Dictionaries/Hash-Werte benötigen und dann ein weiteres durchlaufen der "Basis-Tabelle", um währenddessen die Dictionaries zu durchsuchen und die "Ziel-Tabelle" zu erzeugen. Zudem müsste ich mir ein Konzept überlegen, um das ganze möglichst generisch zu machen, damit auch das Hinzufügen neuer Vergleichskriterien relativ einfach geht.
Irgendwie sind die Ansätze alle ziemlich komplex und wahrscheinlich auch RAM-intensiv. Vielleicht hat hier jemand eine bessere Idee oder kennt in .NET eine Methode, die bereits ähnliche Funktionalitäten bietet, die ich nutzen kann? Mir würde ja z.B. auch die Verwendung von DataRelations reichen, wenn sie anbieten würden, eine Methode zum Vergleichen mit zu übergeben.
Danke & Grüße,
Compu
/edit : Vielleicht reicht mir auch ein Schlagwort o.ä., ich bin dankbar für jeden kleinen Stups in die richtige Richtung, da das ganze Projekt auch noch diese Woche fertig sein soll...
ich arbeite derzeit an einem Konzept, um folgendes Szenario umzusetzen :
Ich habe 4 DataTables (ausgelesen aus CSVs und HTML-Tabellen), wovon 3 mindestens mehrere 10.000, später sicher auch mehrere 100.000 Zeilen oder mehr enthalten. Nun muss ich diese DataTables miteinander verknüpfen. Am Ende will ich dann möglichst wieder eine DataTable haben, zumindest muss es ganz am Ende in einer Excel-Tabelle landen - dafür habe ich bereits Methoden, um DataTables zu schreiben.
Dabei gibt es nicht nur die Bedingung, dass mehrere Spalten einer Tabelle mit denen einer anderen übereinstimmen müssen, was soweit ich mich bis jetzt belesen habe, mit "DataRelations" ginge. Es kann auch in einer Zelle ein * stehen, welcher dann wiederum für jeglichen Wert einer Vergleichszelle der anderen Tabelle als "Match" stehen muss. Die meisten verglichenen Werte sind zudem Strings. LINQ-Joins unterstützen leider auch keine AND oder OR-Operationen.
Das Programm ist jetzt nicht sonderlich zeitkritisch (soll ein einmal wöchentlich erstellter Report werden), aber trotzdem möchte ich den Zeitaufwand zum Verknüpfen der Tabellen möglichst gering halten. Ich hatte jetzt schon überlegt, das ganze durch Verschachtelung von Dictionaries oder anderweitig mit gehashten Werten zu machen. Das würde dann erst einen Durchlauf aller Tabellen zum Erstellen der Dictionaries/Hash-Werte benötigen und dann ein weiteres durchlaufen der "Basis-Tabelle", um währenddessen die Dictionaries zu durchsuchen und die "Ziel-Tabelle" zu erzeugen. Zudem müsste ich mir ein Konzept überlegen, um das ganze möglichst generisch zu machen, damit auch das Hinzufügen neuer Vergleichskriterien relativ einfach geht.
Irgendwie sind die Ansätze alle ziemlich komplex und wahrscheinlich auch RAM-intensiv. Vielleicht hat hier jemand eine bessere Idee oder kennt in .NET eine Methode, die bereits ähnliche Funktionalitäten bietet, die ich nutzen kann? Mir würde ja z.B. auch die Verwendung von DataRelations reichen, wenn sie anbieten würden, eine Methode zum Vergleichen mit zu übergeben.
Danke & Grüße,
Compu
/edit : Vielleicht reicht mir auch ein Schlagwort o.ä., ich bin dankbar für jeden kleinen Stups in die richtige Richtung, da das ganze Projekt auch noch diese Woche fertig sein soll...
Comment