奇妙な問題があり、エラーの場所がわかりません
私は C# で作業しており、Customer オブジェクトに対してフィルターを使用してクエリを実行しているときに、奇妙な一連の結果が得られます。
設定したフィルターが 8 つのレコードを返す必要がある場合、実装は 8、8、3、1、1、1 レコードを返します (この順序で、後続のすべての呼び出しで、それらはすべて重複しています)...
これが私がイテレータを実装した方法です
var customerQuery = new CustomerQuery()
{
ChunkSize = "8",
Item = Guid.NewGuid().ToString("N"),
IncludeFinancialIndicator = false,
IncludeFinancialIndicatorSpecified = true,
MinimumBalanceSpecified = true,
MinimumBalance = 92,
SynchronizedFilterSpecified = true,
SynchronizedFilter = SynchronizedFilterEnumType.Synchronized,
};
var results = new List<Customer>();
int count;
//Loop until find all the results.
do
{
IEnumerable<Customer> partialResult = customerQuery.ExecuteQuery<Customer>(context);
count = partialResult.Count();
//First pass here returns 8 records
//Second pass returns same 8 records again
//third pass returns 3 records
//Three more passes with 1 record each
results.AddRange(partialResult);
} while (count > 0);
私は何か間違っているか、何か不足していますか?
ありがとう!
編集:
これは、ページング オプションを実装するコードです....
var customerSet = new List<Customer>();
List<Customer> customerQueryResult = null;
int startPage = 1;
var qbdCustomerQuery = new CustomerQuery();
do
{
qbdCustomerQuery.ChunkSize = "10";
qbdCustomerQuery.MinimumBalanceSpecified = true;
qbdCustomerQuery.MinimumBalance = 92;
qbdCustomerQuery.ItemElementName = ItemChoiceType4.StartPage;
qbdCustomerQuery.Item = startPage.ToString();
customerQueryResult = qbdCustomerQuery.ExecuteQuery<Customer>(context).ToList();
if (customerQueryResult.Count > 0) { customerSet.AddRange(customerQueryResult); }
startPage++;
} while (customerQueryResult.Count > 0);
ChunkSize を "100" に設定すると、予想される 8 つのレコードが取得されますが、ChunkSize = "10" で実行しようとすると、8,8,1 (重複レコード) が取得されます。