【问题标题】:How to use foreach loops with while-loops如何将 foreach 循环与 while 循环一起使用
【发布时间】:2013-07-06 20:12:06
【问题描述】:

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

我正在跟踪 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;
    }
}

【问题讨论】:

  • 是的对不起我放了

标签: c# foreach while-loop


【解决方案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>

【讨论】:

  • 感谢您纠正这个愚蠢的错误,我仍然看不到返回下一个 500 个结果,但是 current_id 确实会随着每个循环而改变,但是一旦返回前 500 个结果,循环就会关闭跨度>
猜你喜欢
  • 2011-08-06
  • 2013-06-27
  • 2014-12-05
  • 2017-10-09
  • 2020-08-25
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 2014-12-11
相关资源
最近更新 更多