我们如何在foreach循环中迭代datarow数组

时间:2017-01-10 07:48:18

标签: c# datatable datarow

在博士中我从数据表中选择102行。

现在我需要循环前100个dr值。我对每个循环使用以下内容,它显示错误,如“无法将类型datarow转换为int”

首先,我可以取100行并处理一些逻辑,之后我需要从dr的前100个值中删除。之后我需要获取剩余的2个值。

DataRow[] dr = dtSourceDetail.Select("fld_description = '"+desc+"' ");
foreach(int i in dr.Take(100))
{
  //process some logic

  //here need to remove the first row from dr.  
}

我该怎么做?

3 个答案:

答案 0 :(得分:1)

您需要将foreach中的类型更改为DataRow

DataRow[] dr = dtSourceDetail.Select("fld_description = '"+desc+"' ");
foreach(DataRow i in dr.Take(100))
{
  //process some logic

  //here need to remove the first row from dr.  
}

foreach会尝试将从枚举器接收的每个项目转换为您在语句中提供的类型。在这种情况下,您提供int。它收到第一个DataRow,然后尝试投射它,这是它失败的地方。

答案 1 :(得分:0)

好吧,<productFlavor>Compile(path: "<lib name>", configuration: <productFlavor><buildType>) 返回一个可枚举的Take个对象。不是DataRow的可数。所以循环变量必须是int

DataRow

现在您只有一个DataRow[] dr = dtSourceDetail.Select("fld_description = '"+desc+"' "); foreach(DataRow row in dr.Take(100)) { } ,您可以照常访问该行的列值。

row

答案 2 :(得分:0)

这可能适合你。

DataRow[] dr = dtSourceDetail.Select("fld_description = '"+desc+"' ");
for (int i = 0; i < dr.count; i=i+100)
{
    foreach(DataRow i in dr.Skip(i).Take(100))
    {
        //process some logic
    }
}

循环简单的第一个循环只是我们的计数器。然后下一个foreach循环,我们正在使用dr.Skip(i).Take(100),这意味着它将在下次跳过100时第一次占用100,然后给你下一个100.因为你没有100条记录,它会给你剩下的记录。