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