合并数据表——忽略第一行
本文关键字:一行 数据表 合并 | 更新日期: 2023-09-27 18:03:06
如何合并数据表对象忽略第一行?
我需要与我已经得到的数据表合并来自一个已解析的CSV文件和它的第一行(有时)仍然包含标题,这显然不应该在结果表结束…
数据表。Merge方法似乎不提供这样的选项。最好的方法是什么?只是提前删除第一行?但这会影响(改变)"原始",如果我希望它保持原样怎么办?在合并后删除并重新插入?闻起来像"聪明的编码"。真的没有更好的办法吗?
编辑我的前一篇
我在类似的行上写了代码,最后dt1的所有行都完好无损,dt2只包含来自dt1的第2行&3
var dt1 = new DataTable("Test");
dt1.Columns.Add("id", typeof(int));
dt1.Columns.Add("name", typeof(string));
var dt2 = new DataTable("Test");
dt2.Columns.Add("id", typeof(int));
dt2.Columns.Add("name", typeof(string));
dt1.Rows.Add(1, "Apple"); dt1.Rows.Add(2, "Oranges");
dt1.Rows.Add(3, "Grapes");
dt1.AcceptChanges();
dt1.Rows[0].Delete();
dt2.Merge(dt1);
dt2.AcceptChanges();
dt1.RejectChanges();
如果你觉得可以,请告诉我。
Vijay
您可以单独浏览这些行并将它们合并到表中,例如
public static class DataTableExtensions
{
public static void MergeRange(this DataTable dest, DataTable table, int startIndex, int length)
{
List<string> matchingColumns = new List<string>();
for (int i = 0; i < table.Columns.Count; i++)
{
// Only copy columns with the same name and type
string columnName = table.Columns[i].ColumnName;
if (dest.Columns.Contains(columnName))
{
if (dest.Columns[columnName].DataType == table.Columns[columnName].DataType)
{
matchingColumns.Add(columnName);
}
}
}
for (int i = 0; i < length; i++)
{
int row = i + startIndex;
DataRow destRow = dest.NewRow();
foreach (string column in matchingColumns)
{
destRow[column] = table.Rows[row][column];
}
dest.Rows.Add(destRow);
}
}
}