合并数据表——忽略第一行

本文关键字:一行 数据表 合并 | 更新日期: 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);
        }
    }
}