問題:如果在將源數據表合併到實際數據表(ActualDT.Merge(SourceDT)
)時主鍵大於現有的,則只插入行。我下面的問題如何僅在主鍵大於最後一個主鍵時填充DataTable行?
詳情:
我填與從外部服務器API的Int64
主鍵的實際數據表反序列化JSON到源數據表後。然後,我將DataTable中的行寫入數據庫,並清除DataTable中除最大主鍵以外的所有行。後來我從API請求新的數據,並且通常響應包含我已經寫入數據庫並從DataTable清除的相同行。
如果我不清理DataTable行,性能下降,它是記憶豬。所以,我在清潔後留下一排最大的主鑰匙。
我不想在合併之前比較Source DataTable中的每個PrimaryKey,比較可能需要很長時間。
我應該怎麼做才能防止合併我已寫入數據庫並從Actual DataTable中刪除的行?也許我可以在反序列化過程中排除它們(我使用NewtonSoft JSON.net)?或者任何簡單的方法來防止合併行,如果他們的主鍵<實際DataTable的主鍵?
感謝您的回答!
UPDATE:合併代碼
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};
}
你可以發佈'merge function'代碼。你可以使它在裏面 –
@AleksaRistic,我有更新後的例子 –
需要'合併功能'代碼 –