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

3
我有一个包含100行的数据表,我想将31行到50行的范围复制到另一个数据表中。
我遵循以下逻辑。
DataTable dtNew = table.Clone();
for(int k=30; k < 50 && k < table.Rows.Count; k++)
{
     dtNew.ImportRow(table.Rows[k]);
}

有没有更好的方法来做这件事?

表是什么类型? - user7867434
1
@GiladReich DataTable 我猜测。 - Maarten
2个回答

4
使用 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();
}

如果在任何情况下表格行数<50行? - Rama Krishna
@RamaKrishna,你会得到一个异常,所以你必须处理它。 - apomene

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接