我有一个包含100行的数据表,我想将一系列行(第31行到第50行)复制到另一个数据表。
我遵循以下逻辑。
DataTable dtNew = table.Clone();
for(int k=30; k < 50 && k < table.Rows.Count; k++)
{
dtNew.ImportRow(table.Rows[k]);
}
有没有更好的方法来做到这一点?
答案 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);