好吧,假设我从一开始就有2个数据表。
第一个(源)包含来自da数据库的数据。 第二个还包含来自数据库的数据,这些值必须更新到第一个数据库中。
不幸的是他们没有相同的结构。 sourcedatatable有一些额外的列,第二列没有。
例如:
First DT: ID | Name | Company | Age
Second DT: Name | Company | Age
我希望使用第二个DataTable中的值来更新FIRST DataTable,如果存在一些差异(只有差异)。
关于如何解决这个问题的任何想法?关于性能的任何建议,即使使用非常大的数据库?
答案 0 :(得分:0)
如果您正在处理大量数据,我建议尽可能靠近数据库(如果可能,在存储过程中)。
如果坚持使用.NET是强制性的,那么考虑到您提供的场景描述,我会考虑这些选项。
首先,我会选择如何加载数据(我会考虑它们的顺序):
在此之后,我会:
如果您不提供有关数据类型,数量,硬件,数据库类型的更多信息,则很难给出具体而准确的答案。
注意:无论您选择哪种解决方案,都应该记住,很难比较不同结构的内容,因此需要额外添加空列到缺少列的步骤。
答案 1 :(得分:0)
此代码仅供参考,我没时间测试它。它可能需要进行一些调整。尝试类似:
var a = new DataTable();
a.Columns.Add("ID");
a.Columns.Add("Name");
a.Columns.Add("Company");
a.Columns.Add("Age");
var b = new DataTable();
b.Columns.Add("Name");
b.Columns.Add("Company");
b.Columns.Add("Age");
var destination = a.AsEnumerable();
var localValues = b.AsEnumerable();
var diff = destination.Join(localValues, dstRow => dstRow["Name"], srcRow => srcRow["Name"],
(dstRow, srcRow) =>
new {Destination = dstRow, Source = srcRow})
.Where(combinedView =>
combinedView.Destination["Age"] != combinedView.Source["Age"] ||
combinedView.Destination["Company"] != combinedView.Source["Company"]);
另外,我真的会转向一个合适的数据库,并且可能会改进数据模型。