For the list of all the posts in this series please read this one
Context
To search for work items effectively we can use a special TFS API on the WorkItemStore class. The query format is based the Work Item Query Language (or WIQL ) and we can't use Linq directly, but still, we can use LinqPad to write a quick little query.
Required references
Microsoft.TeamFoundation.Client
Microsoft.TeamFoundation.Common
Microsoft.TeamFoundation.VersionControl.Client
Microsoft.TeamFoundation.WorkItemTracking.Client
Query (C# Statements)
var tfs = TfsTeamProjectCollectionFactory .GetTeamProjectCollection(new Uri("http://localhost:8088/tfs")); tfs.EnsureAuthenticated(); var workItemStore = tfs.GetService<WorkItemStore>(); var title = "phone"; var query = string.Format(@" Select [Id], [Work Item Type], [Title], [State] Where [Title] Contains '{0}' From WorkItems", title); workItemStore.Query(query).Cast<WorkItem>() .Select(wi => new { wi.Id, wi.AreaPath, Type = wi.Type.Name, wi.Title, wi.State }) .OrderBy(wi => wi.AreaPath).ThenBy(wi => wi.Type).ThenBy(wi => wi.Title) .Dump();
Result
Here we get the list of all the work items from all projects containing the word 'phone' in their title.
To find more about WIQL please take a look at the MSDN section on it.
IOrderedEnumerable<> (1 item) | ||||
Id | AreaPath | Type | Title | State |
---|---|---|---|---|
2 | Project1 | Bug | Fix the phone number on the Contact page | Done |
3 comments:
I got an error saying there was no from clause. Then I put the From after the Select and before the Where, like a SQL statement, and it worked.
It may have something to do with the version of TFS you are writing the query against. I've long since stopped to use TFS (different job, different tools) so I can't test this against a more recent version. Thanks for you comment.
Looks like the where needs to go before the from. Switch those two lines and it should work.
Post a Comment