如何在一个foreach中跳过结果的迭代

时间:2017-05-19 09:26:27

标签: c# asp.net foreach

我有两个foreach循环,如代码所示:

DataTable dtx = GetAmens(Id);
if (dtx.Rows.Count > 0)
{
    strAmen += @"<ul class='col-md-6'>";
    int c = 0;
    foreach (DataRow dr in dtx.Rows)
    {
        if (c >= ((dtx.Rows.Count / 2) + (dtx.Rows.Count % 2))) break;
        strAmen += "<li class='enabled'>" + dr["amen"].ToString() + "</li>";
        c++;
    }

    strAmen += @"</ul><ul class='col-md-6'>";
    c = 0;
    foreach (DataRow dr in dtx.Rows)
    {
        strAmen += "<li class='enabled'>" + dr["amen"].ToString() + "</li>";
        c++;
    }
    strAmen += @"</ul>";
}

数据表中有7个值。

第一个foreach正在迭代4个元素。

现在我希望第二个foreach语句不能遍历4个元素(结果来自第1 foreach个语句)

而是迭代剩下的3个元素。

任何人都可以建议获得此类结果所需的任何更改??? 提前谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用LINQ将组拆分为两个。然后遍历组并逐个添加到结果中:

ROUNDUP(AVERAGE(IF(RangeName1=2;RangeName2));2)*100&" %."

答案 1 :(得分:0)

一个简单的解决方案是使用新变量和for循环,如果你可以使用它。 这将确保您只需要循环'n'次(n是记录数)。

如果你有一些带有变量“c”的逻辑,那么在内部for循环中使用一个新变量,而不是重用“c”

 DataTable dtx = GetAmens(Id);
 string strAmen = "";
 if (dtx.Rows.Count > 0)
 {
     strAmen += @"<ul class='col-md-6'>";
     int c = 0;

     foreach (DataRow dr in dtx.Rows)
     {
         if (c >= ((dtx.Rows.Count / 2) + (dtx.Rows.Count % 2)))
         {
             strAmen += @"</ul><ul class='col-md-6'>";
             for (c=c; c < dtx.Rows.Count; c++)
             {
                  strAmen += "<li class='enabled'>" + dtx.Rows[c]["amen"].ToString() + "</li>";
             }
             strAmen += @"</ul>";
             break;
         }

         strAmen += "<li class='enabled'>" + dr["amen"].ToString() + "</li>";
         c++;
     }
 }