6

我正在研究 TFS API,我不知道 TFS API 有任何类似 LIMIT 关键字或没有的东西。我需要它来进行分页。

谢谢

4

2 回答 2

5

TFS WIQL中没有与 SQLLIMIT关键字等效的东西,您需要自己实现分页。

一种方法是在第一次访问时检索所有结果,并将它们缓存并自己分页。

另一种方法是在每次用户页面时动态构建 WIQL 查询。例如:

  1. 运行 WIQL 查询以仅返回与查询匹配的工作项 ID。SELECT [System.Id] FROM WorkItems WHERE <conditions>
  2. 缓存该 ID 列表
  3. 将该 ID 列表分成与您的分页大小相匹配的组
  4. 每次您的用户页面时,通过 ID 显式请求工作项。SELECT <fields> FROM WorkItems WHERE [System.Id] IN (10,11,12,13,14,15)

根据您要实现的目标,您还应该知道 TFS 工作项跟踪 API 在幕后为字段值实现分页/延迟加载,以最大限度地延长响应时间。您可以通过附加网络嗅探器并在 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 子句中指定的字段,则该字段将添加到分页字段集中。执行另一个往返以刷新该页面以包含该字段的值。

于 2013-02-01T12:20:35.657 回答
1

我遇到过同样的问题。我应用Take了序列以限制查询提供的结果。不幸的是,这实际上并没有限制数据库返回的结果,但是由于不支持该功能,它提供了一个可行的选项。

Me.mWorkItems.Query(pstrSQL).OfType(Of WorkItem)().Take(5)

使用SkipTake一起可以用于分页。

于 2013-10-08T20:48:37.813 回答