鑑於某個產品積壓ID,我想以編程方式檢索PBI的子任務列表。如何從TFS API中的產品Backlog項檢索子任務列表?
我知道任務中沒有一個字段顯示「Parent PBI Id」。我有一個正在工作的代碼版本,但這真的很慢,因爲我已經在客戶端執行了部分過濾。
看到我如何目前做:
string wiqlQuery =
string.Format(
"Select ID, [Remaining Work], State " +
"from WorkItems " +
"where (([Work Item Type] = 'Task')" +
" AND ([Iteration Path] = '{0}')" +
" AND (State <> 'Removed')" +
" AND (State <> 'Done')) ",
sprint, storyId);
// execute the query and retrieve a collection of workitems
WorkItemCollection workItems = wiStore.Query(wiqlQuery);
if (workItems.Count <= 0)
return null;
var result = new List<TaskViewModel>();
foreach (WorkItem workItem in workItems)
{
var relatedLink = workItem.Links[0] as RelatedLink;
if (relatedLink == null) continue;
if (relatedLink.RelatedWorkItemId != storyId) continue;
Field remWorkField = (from field in workItem.Fields.Cast<Field>()
where field.Name == "Remaining Work"
select field).FirstOrDefault();
if (remWorkField == null) continue;
if (remWorkField.Value == null) continue;
var task = new TaskViewModel
{
Id = workItem.Id,
ParentPbi = relatedLink.RelatedWorkItemId,
RemainingWork = (double) remWorkField.Value,
State = workItem.State
};
result.Add(task);
}
return result;
有你試圖在查詢生成器gui中構建查詢?如果你可以做到這一點,然後將查詢保存爲一個文件,該文件將包含一個很好的wiql語句。如果您可以在wiql中執行查詢,它將轉換爲後端的單個sql查詢,而不是在客戶端api上執行。 – bryanmac
只要方法接受謂詞,您可以使用'workItem.Fields.Cast().FirstOrDefault(f => field.Name ==「Remaining Work」)''。目前你使用'Where(..)。FirstOrDefault()',這是壓倒性的。 –
abatishchev
wistore是什麼? –