如何使用WIQL在ms sql中使用的LIMIT关键字查询TFS工作项

如何使用WIQL在ms sql中使用的LIMIT关键字查询TFS工作项,tfs,workitem,tfs-workitem,tfs-sdk,wiql,Tfs,Workitem,Tfs Workitem,Tfs Sdk,Wiql,我正在研究TFS API,我不知道TFS API有任何类似于LIMIT关键字或no的东西。我需要它来进行分页 谢谢在TFS WIQL中没有与SQLLIMIT关键字等价的东西,您需要自己实现分页 一种方法是在第一次访问时检索所有结果,并缓存它们并自己分页 另一种方法是在每次用户分页时动态构造WIQL查询。例如: 运行WIQL查询以仅返回与查询匹配的工作项ID从工作项中选择[System.Id],其中 缓存该ID列表 将ID列表分成与分页大小匹配的组 每次用户翻页时,通过ID明确请求工作项。从[Sy

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


谢谢

在TFS WIQL中没有与SQL
LIMIT
关键字等价的东西,您需要自己实现分页

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

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

  • 运行WIQL查询以仅返回与查询匹配的工作项ID<代码>从工作项中选择[System.Id],其中
  • 缓存该ID列表
  • 将ID列表分成与分页大小匹配的组
  • 每次用户翻页时,通过ID明确请求工作项。
    从[System.ID]位于(10,11,12,13,14,15)中的工作项中选择。
  • 根据您试图实现的目标,您还应该知道TFS工作项跟踪API在字段值的掩护下实现分页/延迟加载,以最大化响应时间。您可以通过在VisualStudio中附加一个网络嗅探器并滚动一个大的工作项查询来了解其工作原理

    有关更多信息,请参阅:

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

    WorkItemCollection结果=WorkItemStore.Query(
    “从工作项中选择标题,其中(ID<1000)”;
    foreach(结果中的工作项)
    {
    Console.WriteLine(item.Fields[“Title”].Value);
    }
    
    如果您的代码访问的字段未在“选择”字段中指定 子句,则该字段将添加到分页字段集。另一轮 执行trip刷新该页面,以包含该页面的值 场


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

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

    同时使用
    Skip
    Take
    可以进行分页。

    您能解释一下您想做什么吗?我想从tfs获取工作项并显示在网站上(asp.net mvc)。我想在显示时分页,但这似乎是wiql不支持限制键工作来完成的。你知道其他的事情吗?哦,那太愚蠢了。我正在使用VSO REST API。我可以一次获取所有工作项(在一个请求中),因为它不会返回超过20000项(响应包含错误),ID从180000开始,到310000结束。ID中也可能有漏洞,这取决于查询条件。如果我使用带有分页的API客户端库而不是REST API,那么分页在那里是如何工作的?它是在本地分页结果(即一次从VSO请求所有内容)还是只请求
    PageSize
    结果数?令人恼火的是,没有限制功能,但VSO将结果查询限制为20K,这是一个错误。@davidferencyrogožan迟到了一点,但是您可以使用
    $top=200
    限制RESTAPI上的响应。如果您在
    System.Id
    上对查询进行排序,并构建一个动态查询,在其中存储上次调用返回的最后一个Id,则一切就绪。
    Me.mWorkItems.Query(pstrSQL).OfType(Of WorkItem)().Take(5)