是否可以获取项目集合中所有工作项类型的列表?

时间:2015-01-29 05:51:48

标签: c# collections tfs-sdk

我正在尝试从[{1}}获取所有workitem types的列表而不访问project collection中的project

我一直试过

我可以使用project collection对象获取所有workitemType列表的列表,如下面的代码所示:

project

通过搜索获取​​ TfsTeamProjectCollection tfctc = new TfsTeamProjectCollection(newUri ("http://servername:8080/tfs/teamprojectcollection")); WorkItemStore wis = tfctc.GetService<WorkItemStore>(); foreach(Project project in wis.Projects) { foreach (WorkItemType type in project.WorkItemTypes) { Console.WriteLine(type.Name); } } 的列表,我认识TFS中的一个班级为WorkItemTypeCollection

但在使用它时,我无法使用WorkitemType获取workitemcollection的对象。

我尝试过以下代码:

projectCollection

我想做什么

我想在 TfsTeamProjectCollection tfctc = new TfsTeamProjectCollection(newUri ("http://servername:8080/tfs/teamprojectcollection")); WorkItemTypeCollection witc = tfctc.GetService<WorkItemTypeCollection>(); // here I am getting nil object every time // some more code 中获取 WorkItemTypes 列表。

任何人都可以帮我这个吗? 如果我错了,请纠正我。 提前谢谢。

1 个答案:

答案 0 :(得分:5)

工作项类型与团队项目相关联,因此您只能获取团队项目的工作项类型。这背后的原因是每个团队项目可以有不同的工作项类型集。即使你发现同名的多种类型,例如&#34;任务&#34;或者&#34; Bug&#34;,每个团队项目可能已修改其定义。基本上,所有团队项目的组合工作项类型都是团队项目集的工作项类型。

您找到的WorkItemTypeCollection类实际上是WorkItemType个实例的容器。您已使用的Project.WorkItemTypes属性返回可以迭代的WorkItemTypeCollection。但是,此类型未注册为服务 - 这就是tfctc.GetService<WorkItemTypeCollection>()返回null的原因。

因此,您在示例中的嵌套foreach中所做的实际上是它的工作原理。你可以使用LINQ和SelectMany来改进它,但是关于它:

var workItemTypes = wis.Projects
                       .Cast<Project>()
                       .SelectMany(p => p.WorkItemTypes.Cast<WorkItemType>())
                       .ToArray();