如何使用LIMIT关键字在ms sql中使用WIQL来查询TFS workItem

时间:2013-01-11 16:43:48

标签: tfs workitem tfs-workitem tfs-sdk wiql

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

由于

2 个答案:

答案 0 :(得分:4)

在TFS WIQL中没有与SQL LIMIT关键字相同的内容,您需要自己实现分页。

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

另一种方法是每次用户页面动态构建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)
  5. 根据您要实现的目标,您还应该知道TFS工作项跟踪API在字段值的封面下实现分页/延迟加载,以最大化响应时间。您可以通过附加网络嗅探器并在Visual Studio中滚动大型工作项查询来查看其工作原理。

    有关详细信息,请参阅Paging of Field Values

      

    您可以通过选择所有字段来最小化到服务器的往返   您的代码将使用。以下代码进行一次往返   查询和一次往返每次都返回一个标题页   访问新页面。

    WorkItemCollection results = WorkItemStore.Query(
        "SELECT Title FROM Workitems WHERE (ID < 1000)");
    
    foreach (WorkItem item in results)
    {
        Console.WriteLine(item.Fields["Title"].Value);
    }
    
      

    如果您的代码访问了您未在SELECT中指定的字段   子句,该字段被添加到分页字段集。再来一轮   执行trip以刷新该页面以包含其值   字段。

答案 1 :(得分:1)

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

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

同时使用SkipTake可以进行分页。