【问题标题】:Updating DataTable column from another DataTable从另一个 DataTable 更新 DataTable 列
【发布时间】:2013-02-22 21:48:19
【问题描述】:

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

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

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

非常感谢任何朝着正确方向的推动。

【问题讨论】:

    标签: c# .net datatable dataset updates


    【解决方案1】:

    您当然可以自己迭代所有记录并匹配它们。但是您也可以在数据集中的 DataTables 之间建立关系,然后在 records 数据表中创建一个计算列,以提取父列的值。看这个例子: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")

    【讨论】:

    • 谢谢!有更多这种类型的工作来,所以非常感谢教育。
    【解决方案2】:

    试试这个:

    向第二个数据表添加新列

    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 命名空间

    【讨论】:

    • DataColumn dc = new DataColumn("DateCol", typeof(System.DateTime)); Registrations.Columns.Add(dc); Registrations.AsEnumerable().Join(TimeStamps.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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多