Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从另一个DataTable更新DataTable列_C#_.net_Datatable_Dataset_Updates - Fatal编程技术网

C# 从另一个DataTable更新DataTable列

C# 从另一个DataTable更新DataTable列,c#,.net,datatable,dataset,updates,C#,.net,Datatable,Dataset,Updates,使用.NET 4 C#,我有一个数据集,其中包含两个从导入的csv文件生成的数据表,它们是从表单注册数据创建的。一个包含记录ID和时间戳。另一个是产品注册列表(名称、地址等),以及相应的记录ID(约10000条记录) 如何将第一个数据表中的时间戳插入到与正确记录ID匹配的第二个数据表中?我是否可以将DataAdapter附加到现有数据集并以这种方式对其进行查询?我希望能在第二个数据表中添加一个timestamp列,并从第一个数据表更新它 我知道这没有意义(为什么不在导出表单数据时包含时间戳?)。

使用.NET 4 C#,我有一个数据集,其中包含两个从导入的csv文件生成的数据表,它们是从表单注册数据创建的。一个包含记录ID和时间戳。另一个是产品注册列表(名称、地址等),以及相应的记录ID(约10000条记录)

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

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

非常感谢您向正确方向轻推。

试试以下方法:

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

DataColumn dc = new DataColumn("DateCol", typeof(System.DateTime));
dt2.Columns.Add(dc);
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"]));
现在使用第一个datatable更新第二个datatable中的datecol列

DataColumn dc = new DataColumn("DateCol", typeof(System.DateTime));
dt2.Columns.Add(dc);
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查询,您必须在类文件中导入名称空间,当然,您可以自己迭代所有记录并将它们匹配起来。但您也可以在数据集中的数据表之间建立关系,然后在records数据表中创建一个计算列,用于提取父列的值。请参见此示例:

请参阅这篇关于如何实际添加关系的文章:

在底部:

父表中的Parent.ColumnName列


因此,在创建关系之后,您将执行如下操作:
ds[“Table2”].Columns.Add(“Timestamp”,typeof(DateTime),“Parent.Timestamp”)

DataColumn dc=newdatacolumn(“DateCol”,typeof(System.DateTime));注册。列。添加(dc);Registrations.AsEnumerable().Join(timestaps.AsEnumerable(),dt2Rows=>dt2Rows.ItemArray[Convert.ToInt32(“ID”)],dt1Rows=>dt1Rows.ItemArray[Convert.ToInt32(“ID”),(dt2Rows,dt1Rows)=>new{dt2Rows,dt1Rows}.ToList().ForEach(i=>t.dt2Rows.SetField(“DateCol”,i.dt1Rows.ItemArray[Convert.ToInt32(“DateCol”)]);很抱歉,仍然在搞清楚这个系统:(我必须将一些东西转换为int,但似乎已经准备好构建,除了“t在当前上下文中不存在”)@user1366794,更新的答案,我在foreach中使用了t而不是I的拼写错误谢谢!还有更多此类工作要做,所以非常感谢您的教育。