【发布时间】:2017-10-07 13:12:30
【问题描述】:
问题:在将源 DataTable 合并到实际 DataTable (ActualDT.Merge(SourceDT)) 时,仅当主键大于现有主键时才插入行。
我的问题详情如下:
在将 JSON 反序列化为源数据表后,我通过来自外部服务器的 API 使用 Int64 主键填充实际数据表。然后我将数据表中的行写入我的数据库并清除数据表中的所有行,除了最大的主键。后来我从 API 请求新数据,并且响应通常包含我已经写入数据库并从我的 DataTable 中清除的相同行。
如果我不清理 DataTable 行,性能会下降,而且是内存猪。所以,我在清理后留下最大主键的一行。
我不想在合并之前比较 Source DataTable 中的每个 PrimaryKey,比较可能需要很多时间。
我应该怎么做才能防止合并我已经写入数据库并从实际数据表中删除的行?也许我甚至可以在反序列化过程中排除它们(我使用 NewtonSoft JSON.net)?或者,如果它们的主键
感谢您的回答!
更新:合并代码
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,我有更新帖子的例子
-
需要
merge function代码 -
@AleksaRistic, WhiteTable.Merge(BlackPairs);这是合并函数,C# 中 System.Data 的标准。或者你的意思是什么功能?
-
还有一个问题。两个表中的列是否相同?