我需要將對 CosmosDB 的查詢結果限制為 1000 條記錄,我試圖將提要迭代器設定為在結果串列達到 1000 條時退出,但現在它在 100 條記錄后停止。這是我當前的代碼:
public async Task<IEnumerable<AS2InboundLogRecord>> RetrieveInboundLogs(string partitionKeyName, DateTime startDate, DateTime endDate)
{
var inboundLogs = new List<AS2InboundLogRecord>();
string continuationToken = null;
int itemLimit = 1000;
QueryRequestOptions requestOptions = new QueryRequestOptions()
{
MaxItemCount = 100
};
using (FeedIterator<AS2InboundLogRecord> setIterator = dbContainer.GetItemLinqQueryable<AS2InboundLogRecord>(true, continuationToken, requestOptions)
.Where(x => (x.PartitionKey == partitionKeyName || partitionKeyName == null) &&
(x.MessageDate >= startDate) &&
(x.MessageDate <= endDate))
.ToFeedIterator())
{
while (setIterator.HasMoreResults)
{
FeedResponse<AS2InboundLogRecord> response = await setIterator.ReadNextAsync();
inboundLogs.AddRange(response);
if (response.Count >= itemLimit) { break; }
}
Console.WriteLine(inboundLogs.Count());
return inboundLogs.OrderByDescending(x => x.MessageDate);
};
}
任何輸入都會被應用,謝謝
uj5u.com熱心網友回復:
我認為你必須糾正兩件事:
第一:你設定limitCount聽起來100好像它只獲取 100 條記錄,如果這個限制獲取計數將它設定為1000否則轉到Second短語。
第二:您的if條件可能不起作用,因為您比較response.Count而inboundLogs.Count應該比較。
更正:
public async Task<IEnumerable<AS2InboundLogRecord>> RetrieveInboundLogs(string partitionKeyName, DateTime startDate, DateTime endDate)
{
var inboundLogs = new List<AS2InboundLogRecord>();
string continuationToken = null;
int itemLimit = 1000;
QueryRequestOptions requestOptions = new QueryRequestOptions()
{
MaxItemCount = 10000
};
using (FeedIterator<AS2InboundLogRecord> setIterator = dbContainer.GetItemLinqQueryable<AS2InboundLogRecord>(true, continuationToken, requestOptions)
.Where(x => (x.PartitionKey == partitionKeyName || partitionKeyName == null) &&
(x.MessageDate >= startDate) &&
(x.MessageDate <= endDate))
.ToFeedIterator())
{
while (setIterator.HasMoreResults)
{
FeedResponse<AS2InboundLogRecord> response = await setIterator.ReadNextAsync();
inboundLogs.AddRange(response);
if (inboundLogs.Count >= itemLimit) { break; }
}
Console.WriteLine(inboundLogs.Count());
return inboundLogs.OrderByDescending(x => x.MessageDate);
};
}
Ascosmosdb不支持Skip,Take您也可以在此處offset使用和limit描述,
或者您也可以使用of來確保仍有專案,例如:ContinuationTokenresponse
do
{
response = await setIterator.ReadNextAsync();
//List<dynamic> documents = response.Resource.ToList();
continuationToken = response.ContinuationToken;
inboundLogs.AddRange(response);
} while (continuationToken != null && inboundLogs.Count <= itemLimit);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/457037.html
上一篇:操作文本檔案-更改多行
