从另一个DataTable更新DataTable列

时间:2013-02-22 21:48:20

标签: c# .net datatable dataset updates

使用.NET 4 C#,我有一个DataSet,其中包含从导入的csv文件生成的两个DataTable,这些文件是从表单注册数据创建的。一个包含记录ID和时间戳。另一个是产品注册清单(名称,地址等),带有相应的记录ID(约10,000条记录)

如何将第一个数据表中的时间戳插入到与正确记录ID匹配的第二个数据表中?我可以将DataAdapter附加到现有DataSet并以这种方式查询它们吗?我希望我可以在第二个数据表中添加一个时间戳列,并从第一个数据表中更新。

我知道这没有意义(为什么不在导出表单数据时包含时间戳?)。我正在使用Joomla表单模块进行注册,导出不包括时间戳。从数据库中,我可以导出匹配的时间戳和记录ID数据,但DataBase结构将记录字段拆分为单独的表,我无法弄清楚如何将整个记录合并为可用内容,所以我'我坚持用两个csv显示相同记录的数据。)

对正确方向的任何推动都非常感激。

2 个答案:

答案 0 :(得分:1)

试试这个:

将新列添加到第二个数据表

DataColumn dc = new DataColumn("DateCol", typeof(System.DateTime));
dt2.Columns.Add(dc);

现在使用第一个数据表

更新第二个数据表中的datecol列
dt2.AsEnumerable().Join(  dt1.AsEnumerable(),
       dt2Rows => dt2Rows.ItemArray["record_id"],
       dt1Rows => dt1Rows.ItemArray["record_id"],
       (dt2Rows, dt1Rows) => new { dt2Rows, dt1Rows })
 .ToList()
 .ForEach(i => i.dt2Rows.SetField("DateCol", i.dt1Rows.ItemArray["DateCol"]));

要使用上述linq查询,您必须在类文件中导入Systems.Linq命名空间

答案 1 :(得分:1)

您当然可以自己迭代所有记录并进行匹配。但您也可以在数据集中的DataTable之间建立关系,然后在记录数据表中创建一个计算列,该列可以提取父列的值。请参阅此示例:http://windowsdevcenter.com/dotnet/2003/05/26/datacolumn_expressions.html

请参阅此文章,了解如何实际添加关系:http://msdn.microsoft.com/en-us/library/ay82azad%28v=vs.71%29.aspx

走向最底层:

  

Parent.ColumnName父表中的列

因此,在创建关系后,您会执行以下操作:ds["Table2"].Columns.Add("Timestamp", typeof(DateTime), "Parent.Timestamp")