【问题标题】:how can we iterate datarow array in foreach loop我们如何在 foreach 循环中迭代数据行数组
【发布时间】:2017-05-24 15:19:10
【问题描述】:

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

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

首先,我可以获取 100 行并处理一些逻辑,之后我需要从 dr.after 中删除前 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.  
}

我该怎么做?

【问题讨论】:

  • 嘿@User 看看我提供的解决方案是否有帮助,并确认您是否仍然遇到任何问题:)

标签: c# datatable datarow


【解决方案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,然后尝试强制转换它,这就是它失败的地方。

【讨论】:

  • 你能详细说明一下吗
  • 在执行了一些逻辑之后,我如何从 dr 中删除前 100 条记录,并且我也需要循环剩下的两条记录
  • 我不确定这是否与同一个问题有关,也许可以针对该问题启动另一个线程。
  • @User 要获得最后 2 个,您可以使用 Skip,所以它是 dr.Skip(100).Take(2)
【解决方案2】:

好吧,Take 返回一个可枚举的 DataRow 对象。不是ints 的可枚举项。所以循环变量必须是DataRow:

DataRow[] dr = dtSourceDetail.Select("fld_description = '"+desc+"' ");
foreach(DataRow row in dr.Take(100))
{
}

现在您有了一个 row,您可以照常访问该行的列值。

int i = (int)row["some_int_column"];

【讨论】:

    【解决方案3】:

    这可能会为您做诀窍。

    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个记录,它将为您提供REST记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 2021-10-18
      • 1970-01-01
      相关资源
      最近更新 更多