Как использовать ключевое слово LIMIT как в MS SQL для WIQL для запроса TFS workItem
Я работаю над TFS API, я не знаю, есть ли у TFS API какие-либо вещи, например ключевое слово LIMIT или нет. Мне это нужно для подкачки страниц.
Спасибо
2 ответа
Нет ничего эквивалентного SQL LIMIT
Ключевое слово в TFS WIQL, вам нужно будет реализовать пейджинг самостоятельно.
Один из подходов состоит в том, чтобы получить все результаты при первом доступе, а также кэшировать их и размещать на страницах самостоятельно.
Другим подходом было бы динамическое построение запроса WIQL каждый раз, когда ваши пользовательские страницы. Например:
- Запустите WIQL-запрос, чтобы получить только идентификаторы рабочих элементов, соответствующие запросу.
SELECT [System.Id] FROM WorkItems WHERE <conditions>
- Кэшируйте этот список идентификаторов
- Разбейте этот список идентификаторов на группы, соответствующие размеру вашего подкачки
- Каждый раз, когда ваши пользовательские страницы явно запрашивают идентификатор рабочего элемента.
SELECT <fields> FROM WorkItems WHERE [System.Id] IN (10,11,12,13,14,15)
В зависимости от того, чего вы пытаетесь достичь, вы также должны знать, что API-интерфейс отслеживания рабочих элементов TFS реализует загрузку страниц / отложенную загрузку под полями для значений полей, чтобы максимизировать время отклика. Чтобы увидеть, как это работает, подключите сетевой анализатор и прокрутите большой запрос рабочего элемента в Visual Studio.
См. Пейджинг значений полей для получения дополнительной информации:
Вы можете минимизировать количество обращений к серверу, выбрав все поля, которые будет использовать ваш код. Следующий код выполняет одно и то же обращение для запроса и одно - для возврата страницы заголовков при каждом обращении к новой странице.
WorkItemCollection results = WorkItemStore.Query(
"SELECT Title FROM Workitems WHERE (ID < 1000)");
foreach (WorkItem item in results)
{
Console.WriteLine(item.Fields["Title"].Value);
}
Если ваш код обращается к полю, которое вы не указали в предложении SELECT, это поле добавляется к набору постраничных полей. Выполняется еще один круговой обход, чтобы обновить эту страницу и включить значения этого поля.
Я была такая же проблема. Я применил Take
на последовательности, чтобы ограничить результаты, доступные по запросу. К сожалению, это на самом деле не ограничивает результаты, возвращаемые базой данных, но, поскольку эта функция не поддерживается, она предоставляет работоспособную опцию.
Me.mWorkItems.Query(pstrSQL).OfType(Of WorkItem)().Take(5)
С помощью Skip
а также Take
вместе могли бы работать на пейджинг.