wake-up-neo.com

Wie hängt man eine DataTable an eine andere DataTable an?

Ich möchte eine DataTable an eine andere DataTable anhängen. Ich sehe die DataTable-Klasse hat zwei Methoden; "Laden (IDataReader)" und "Zusammenführen (DataTable)". In der Dokumentation scheinen beide die eingehenden Daten mit der vorhandenen DataTable zusammenzuführen, wenn Zeilen vorhanden sind. Ich werde die Zusammenführung in einer Datenzugriffsschicht durchführen.

Ich könnte einen IDataReader verwenden und die Load-Methode verwenden, um die DataTables zusammenzuführen. Oder ich könnte ein DataSet mit dem IDataReader laden, die DataTable vom DataSet abrufen und dann die DataTables mit der Merge-Methode zusammenführen.

Ich habe mich gefragt, ob mir jemand sagen könnte, welche Methode das richtige ist.

Lassen Sie mich alternativ wissen, ob Sie einen anderen Vorschlag zur Durchführung dieser Aufgabe haben.

38
Jason Kanaris

Für das Zusammenführen ist eine DataTable erforderlich, für das Laden ist ein IDataReader erforderlich. Je nachdem, auf welche Datenschicht Sie zugreifen können, verwenden Sie die erforderliche Methode. Ich verstehe, dass Load intern Merge aufrufen wird, aber nicht 100% sicher ist.

Wenn Sie über zwei DataTables verfügen, verwenden Sie Merge.

46
Thies

Der Datentyp in demselben Spaltennamen muss gleich sein.

dataTable1.Merge(dataTable2);

Danach ist das Ergebnis:

dataTable1 = dataTable1 + dataTable2

48
Xtian11

Sie könnten Ihre DataAdapter die Arbeit machen lassen. DataAdapter.Fill(DataTable) fügt Ihre neuen Zeilen an alle vorhandenen Zeilen in DataTable an.

17
Sam Axe

Fügen Sie zwei Datensätze hinzu, die Datentabellen enthalten. Jetzt werden sie nach Bedarf zusammengeführt

DataSet ds1 = new DataSet();
DataSet ds2 = new DataSet();

DataTable dt1 = new DataTable();
dt1.Columns.Add(new DataColumn("Column1", typeof(System.String)));

DataRow newSelRow1 = dt1.NewRow();
newSelRow1["Column1"] = "Select";
dt1.Rows.Add(newSelRow1);

DataTable dt2 = new DataTable();
dt2.Columns.Add(new DataColumn("Column1", typeof(System.String)));

DataRow newSelRow2 = dt1.NewRow();
newSelRow2["Column1"] = "DataRow1Data";  // Data
dt2.Rows.Add(newSelRow2);

ds1.Tables.Add(dt1);
ds2.Tables.Add(dt2);

ds1.Tables[0].Merge(ds2.Tables[0]);

Jetzt hat ds1 die zusammengeführten Daten

5

Stellen Sie sich eine Lösung vor, die beliebig viele Tabellen ordentlich handhabt.

//ASSUMPTION: All tables must have the same columns
var tables = new List<DataTable>();
tables.Add(oneTableToRuleThemAll);
tables.Add(oneTableToFindThem);
tables.Add(oneTableToBringThemAll);
tables.Add(andInTheDarknessBindThem);
//Or in the real world, you might be getting a collection of tables from some abstracted data source.

//behold, a table too great and terrible to imagine
var theOneTable = tables.SelectMany(dt => dt.AsEnumerable()).CopyToDataTable();

Eingekapselt in einen Helfer für die zukünftige Wiederverwendung:

public static DataTable CombineDataTables(params DataTable[] args)
{
    return args.SelectMany(dt => dt.AsEnumerable()).CopyToDataTable();
}

Nur ein paar Tabellen im Code deklarieren lassen?

var combined = CombineDataTables(dt1,dt2,dt3);

Möchten Sie sich in eine der vorhandenen Tabellen einfügen, anstatt eine neue zu erstellen?

dt1 = CombineDataTables(dt1,dt2,dt3);

Haben Sie bereits eine Sammlung von Tabellen, anstatt sie einzeln zu deklarieren?

//Pretend variable tables already exists
var tables = new[] { dt1, dt2, dt3 };
var combined = CombineDataTables(tables);
0
Derpy