问题:如果在将源数据表合并到实际数据表(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,我有更新后的例子 –
需要'合并功能'代码 –