如何使用带有while循环的foreach循环

时间:2013-07-09 09:20:51

标签: c# foreach while-loop

我有一个while循环,它继续从查询中提取数据,直到查询不再返回结果为止,在每个循环中,for each循环将每个返回的数据填充到xml文件中。 查询每个查询的结果限制为500,因此我想返回500个结果填充它们并再次查询下一个500,直到查询返回代码< 1(没有结果)

我正在跟踪id并在查询中使用它来获取逻辑,但是一旦前500个结果返回,循环就不会得到下一个500.

我做错了什么?

代码:

bool is_finished = false;
while (is_finished == false)
{
    string current_id = "0";
    sb.Append("<queryxml><entity>Account</entity><query><field>AccountNumber<expression op='greaterthan'>" + current_id + "</expression></field></query></queryxml>").Append(System.Environment.NewLine);
    var r = client.query(at_integrations, sb.ToString());
    if (r.ReturnCode == 1)
    {

        foreach (var item in r.EntityResults) // max EntityResults 500 per query
        {
            Account acct = (Account)item;
            //create xml file with the results
            current_id = acct.id.ToString();
        }
    }
    else
    {
        is_finished = true;
    }
}

1 个答案:

答案 0 :(得分:1)

你的循环中有current_id的定义,每次迭代都会将它重置为零。

您应该对此进行调试,您可以非常轻松地添加Debug.WriteLine(sb);以查看内容,并且您会看到它始终返回相同的内容(请注意current_id始终为0):

<queryxml><entity>Account</entity><query><field>AccountNumber<expression op='greaterthan'>0</expression></field></query></queryxml>

这是更新的代码,它只是将current_id的定义移出循环,以便可以更新它并且值将会坚持。

bool is_finished = false;
string current_id = "0";
while (is_finished == false)
{
    sb.Append("<queryxml><entity>Account</entity><query><field>AccountNumber<expression op='greaterthan'>" + current_id + "</expression></field></query></queryxml>").Append(System.Environment.NewLine);
    var r = client.query(at_integrations, sb.ToString());
<snip>