1

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

1 回答 1

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>
于 2013-07-09T09:26:58.303 回答