TFS API – 如何从特定的团队项目中获取工作项目

我试图查询TfsTeamProjectCollection包含194个团队项目的主TfsTeamProjectCollection的单个团队项目。 我知道如何从WorkItem通过Id获取WorkItemStore 。 问题是,通过这样做,APIsearch集合中的所有项目,查询需要大约一分钟。 这太慢了,必须有办法直接从一个团队项目查询工作项目? 这里是我有的代码:

  private Uri collectionUri; private TfsTeamProjectCollection projectCollection; private WorkItemStore workItemStore; public Project GetTeamProject() { projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(collectionUri); workItemStore = projectCollection.GetService<WorkItemStore>(); Project teamProject = workItemStore.Projects[TFS_PROJECT_KEY]; return teamProject; } 

现在我有了我感兴趣的团队项目,如何通过ID查询工作项目,或者只是获取项目中的所有工作项目?

使用查询来查找您感兴趣的工作项可能是最有效的。您可以将Where project ='@Project'添加到查询中,以将范围限制为该项目。 通过首先调用BeginQuery,然后调用EndQuery,你将得到一个你正在寻找的项目的workitem集合。

获取所需wql查询的最简单方法是在Team Explorer中创build一个查询,然后使用file-> save as(在编辑模式下)将其保存到文件中。 在记事本中打开该文件,将查询复制到那里。

或者,您可以直接使用WorkItemStore.Query方法来实现相同的目的。

你可以尝试像这样获取teamProject所有teamProject

 WorkItemCollection workItemCollection = workItemStore.Query( " SELECT [System.Id], [System.WorkItemType],"+ " [System.State], [System.AssignedTo], [System.Title] "+ " FROM WorkItems " + " WHERE [System.TeamProject] = '" + teamProject.Name + "' ORDER BY [System.WorkItemType], [System.Id]"); 

这得到一个特定的WorkItem ID:

 WorkItem workItem = workItemStore.GetWorkItem(555);