Does anyone know if it is possible to retrieve a list of work items and their linked work items in one trip from TFS using their TFS API web services?
The article you 're referring to in your answer presents with a method to do what you 're after, using WIQL. Certainly, not a bad choice.
Another way, in my opinion better, is to simply generate graphically the query that yields the results you 're after. You probably need a simple "Work Items and Direct Link":
Once you 've saved that you 'll be able to:
For the latter part, supposing your query is named "MyLinkedQuery" and it resides under "Team Queries" of TeamProject "MyProj", you can do something like this:
using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
namespace LinkedQueryResults
{
class Program
{
static void Main()
{
TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFSURL"));
var workItemStore = (WorkItemStore)teamProjectCollection.GetService(typeof(WorkItemStore));
var project = workItemStore.Projects["MyProj"];
QueryHierarchy queryHierarchy = project.QueryHierarchy;
var queryFolder = queryHierarchy as QueryFolder;
QueryItem queryItem = queryFolder["Team Queries"];
queryFolder = queryItem as QueryFolder;
if (queryFolder != null)
{
var myQuery = queryFolder["MyLinkedQuery"] as QueryDefinition;
if (myQuery != null)
{
var wiCollection = workItemStore.Query(myQuery.QueryText);
foreach (WorkItem workItem in wiCollection)
{
Console.WriteLine(workItem.Title);
}
}
}
}
}
}
Found an article regarding this issue.
It allows you to use a tree query, where you can get the parent item ids and it's linked items ids in one query. Using this, a second query can be used to get the actual detailed work item objects. Two queries to solve the issue.
Edit: I also wrote a post about this on my blog.