2013-02-22 91 views
1

使用.NET 4 C#,我有一個DataSet,其中包含從導入的csv文件生成的兩個DataTable,它們是從表單註冊數據創建的。一個包含一個記錄ID和一個時間戳。另一個是產品註冊名稱(名稱,地址等),以及相應的記錄ID(約10,000條記錄)從另一個DataTable更新DataTable列

如何將時間戳記從第一個數據表插入第二個數據表,匹配正確的記錄ID ?我可以將DataAdapter附加到現有DataSet並以這種方式對它們進行查詢嗎?我希望我可以添加一個時間戳列給我第二個數據表,並從第一個更新。

我知道這沒有意義(爲什麼不包括導出表單數據時的時間戳?)。我正在使用Joomla表單模塊進行註冊,並且導出不包括時間戳。從數據庫中,我可以導出匹配的時間戳和記錄ID數據,但DataBase結構將記錄字段拆分爲單獨的表,我無法弄清楚如何將整個記錄合併爲可用內容, m卡住了兩個csv顯示相同記錄的數據)。

任何在正確的方向微調非常讚賞。

回答

1

你當然可以自己迭代所有記錄並匹配它們。但是,您也可以在數據集中的DataTables之間建立關係,然後在記錄數據表中創建一個計算列,以獲取父列的值。看到這個例子:http://windowsdevcenter.com/dotnet/2003/05/26/datacolumn_expressions.html

請參閱本文就如何實際添加的關係:在一個父表

所以經過

Parent.ColumnName柱:http://msdn.microsoft.com/en-us/library/ay82azad%28v=vs.71%29.aspx

朝下方你建立了這種關係,你會這樣做:ds["Table2"].Columns.Add("Timestamp", typeof(DateTime), "Parent.Timestamp")

+0

中使用t代替i謝謝!有更多這種類型的工作即將到來,所以非常重視教育。 – user1366794 2013-02-23 00:03:24

1

試試這個:使用

添加新列第2個數據表

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

現在更新2次的數據表這個datecol列第一的DataTable

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

+0

DataColu mn dc = new DataColumn(「DateCol」,typeof(System.DateTime)); Registrations.Columns.Add(dc); Registrations.AsEnumerable()。加入(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「)])); – user1366794 2013-02-22 22:53:09

+0

對不起,仍然搞清楚這個系統:(我不得不投入一些東西作爲整數,但似乎準備建立,除了「噸不存在於當前的情況下) – user1366794 2013-02-22 22:54:56

+0

@ user1366794,更新的答案,有錯別字我是在ForEach – 2013-02-23 22:51:15