如何将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;
}
}
循环中有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>