Das Problem: nur Zeilen einfügen , wenn der Primärschlüssel größer als der vorhandene beim Zusammenführen von Quell-DataTable mit tatsächlichen DataTable (ActualDT.Merge(SourceDT)
).Wie füllt man DataTable-Zeilen nur, wenn der Primärschlüssel größer als der letzte Primärschlüssel ist?
Details von meinem Problem unter:
Ich fülle eine tatsächliche Datentabelle mit einem Int64
Primärschlüssel von der API von einem externen Server nach JSON Quelle Datatable Deserialisieren. Dann schreibe ich Zeilen von DataTable in meine Datenbank und bereinige alle Zeilen in DataTable mit Ausnahme des größten Primärschlüssels. Später fordere ich neue Daten von der API und oft enthält die Antwort die gleichen Zeilen, die ich bereits in die Datenbank geschrieben und von meiner DataTable bereinigt habe.
Wenn ich die DataTable-Zeilen nicht bereinigen, sinkt die Leistung und es ist Speicher Schwein. Also hinterlasse ich eine Zeile mit dem größten Primärschlüssel nach der Reinigung.
Ich möchte nicht jeden PrimaryKey von Source DataTable vor dem Zusammenführen vergleichen, Vergleich kann viel Zeit in Anspruch nehmen.
Was kann ich tun, um das Zusammenführen von Zeilen zu verhindern, die ich bereits in die Datenbank geschrieben und aus der tatsächlichen DataTable entfernt habe? Vielleicht kann ich sie sogar beim Deserialisierungsprozess ausschließen (ich benutze NewtonSoft JSON.net)? Oder einen schnellen Weg, um das Zusammenführen von Zeilen zu verhindern, wenn sie Primärschlüssel < Primärschlüssel in Actual DataTable?
Vielen Dank für Ihre Antworten!
UPDATE: Fusion Code
public class MyData
{
DataTable BlackPairs = new DataTable();
DataTable WhiteTable = new DataTable();
public string _Json {
set
{
DataSet TempDS = JsonConvert.DeserializeObject<DataSet>(value);
try
{
foreach (DataTable table in TempDS.Tables)
{
BlackPairs = table.Copy();
WhiteTable.Merge(BlackPairs);
}
}catch{}
}
}
public MyData()
{ //columns initialization
WhiteTable.Columns.AddRange(new DataColumn[]{columns);
WhiteTable.PrimaryKey = new DataColumn[]{tid};
}
Können Sie 'merge function' Code posten. Sie können das darin machen –
@AleksaRistic, ich habe Update-Post mit Beispiel –
Notwendigkeit 'merge Funktion' Code –