Мне нужны первые 100 сущностей (самые последние) из нескольких тысяч сущностей, соответствующих моему фильтру TableQuery, и я попытался сделать это двумя способами:
Первой попыткой было использование индексасчетчик в цикле foreach
, чтобы сломаться, когда он достигнет "100".Это дало мне странное случайное подмножество данных, большинство из которых отсутствовало, а не 100 сущностей;больше как несколько сотен, а не четное число.
Вторая попытка вставлена ниже и, по сути, игнорирует мой токен продолжения, а также устанавливает .take
в «100».Это дает мне точное количество объектов, совпадающих с целым целым, однако многие объекты отсутствуют.
Каждая попытка дает разные результаты, и я думаю, что знаю почему, но я не знаю, какисправить это, чтобы вернуть то, что мне нужно.Я понимаю, что установка фильтра запроса на метку времени не очень хороша для производительности (она не индексируется ... верно?).Так я должен заполнить другое поле со значением даты / времени, чтобы отфильтровать?
public async Task<List<ActivityModel>> GetActivitiesAsync(string DomainName, string NodeId, string ComputerName)
{
List<ActivityModel> activities = new List<ActivityModel>();
CloudTable cloudTable = TableConnection("NodeEvents");
string domainFilter = TableQuery.GenerateFilterCondition("DomainName", QueryComparisons.Equal, DomainName);
string nodeIdFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, NodeId);
string computerNameFilter = TableQuery.GenerateFilterCondition("ComputerName", QueryComparisons.Equal, ComputerName);
string filter1 = TableQuery.CombineFilters(domainFilter, TableOperators.And, nodeIdFilter);
string filter2 = TableQuery.CombineFilters(filter1, TableOperators.And, computerNameFilter);
TableContinuationToken continuationToken = null;
var result = await cloudTable.ExecuteQuerySegmentedAsync(new TableQuery<ActivityModel>().Where(filter2).Take(100), continuationToken);
if (result.Results != null)
{
foreach (ActivityModel entity in result.Results)
{
activities.Add(entity);
}
}
return activities;
}