将一系列数据行复制到另一个数据表 - C#

时间:2018-02-01 10:47:23

标签: c# mysql datatable

我有一个包含100行的数据表,我想将一系列行(第31行到第50行)复制到另一个数据表。

我遵循以下逻辑。

DataTable dtNew = table.Clone();
for(int k=30; k < 50 && k < table.Rows.Count; k++)
{
     dtNew.ImportRow(table.Rows[k]);
}

有没有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:2)

使用LINQ您可以执行以下操作:

DataTable dtNew = table.Select().Skip(31).Take(20).CopyToDataTable();

性能方面,使用LINQ不会做得更好,但它会使它更具可读性。

编辑:已添加处理检查

int numOFEndrow = 20;
int numOfStartRow = 31;
if (table.Rows.Count > numOFEndrow +numOfStartRow)
{
    DataTable dtNew = table.Select().Skip(numOfStartRow).Take(numOFEndrow).CopyToDataTable();
}

答案 1 :(得分:1)

如果它是关于可读性的,那么一个好主意就是把它放到扩展方法中 不改变你的逻辑:

public static class Utils
{
    public static void CopyRows(this DataTable from, DataTable to, int min, int max)
    {
        for (int i = min; i < max && i < from.Rows.Count; i++)
            to.ImportRow(from.Rows[i]);
    }
}

然后,您可以在没有所有花哨语法的情况下重复使用它,并且知道如果存在性能问题,它会完全满足您的需求:

        DataTable dt1 = new DataTable();
        DataTable dt2 = new DataTable();
        dt1.CopyRows(dt2, 30, 50);