如何将foreach循环与while循环一起使用

本文关键字:循环 一起 while foreach | 更新日期: 2023-09-27 18:21:33

我有一个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;
    }
}

如何将foreach循环与while循环一起使用

循环中有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>