0

特定の WorkItems を取得するための次のコードがあります。

string workItemQueryString = "Select Id, State, Type From WorkItems Where [Work Item Type] = 'Code Review Request' And [Area Path] = 'abc' Order By [Changed Date] Desc";
var workItemQuery = new Query(workItemStore, workItemQueryString);
WorkItemCollection queryResults = workItemQuery.RunQuery();

このコードは高速に実行されます (< 1 秒)。ただし、「Associated Context Type」や「Associated Context」などの追加フィールドも取得したいと考えています。

だから私はこのコードを使用してそれらのフィールドを取得します:

var workItemDetails = queryResults.Cast<WorkItem>().Select(workItem => new WorkItemDetail
{
    WorkItem = workItem,
    AssociatedContextType = workItem.Fields.Contains("Associated Context Type") ? workItem.Fields["Associated Context Type"].Value : null,
    AssociatedContext = workItem.Fields.Contains("Associated Context") ? workItem.Fields["Associated Context"].Value : null
}).ToList();

しかし、このコードの実行は非常に遅く (13 ~ 20 秒)、すべてのデータを取得するために (作業項目ごとに) 個別のクエリが TFS サーバーに対して実行されているように見えます。

Parallel.ForEachステートメントを使用すると、コードが例外で壊れることに注意してください。

WorkItemCollection 内の WorkItem の総数は約 2800 です。

4

1 に答える 1

0

変更してみてください:

AssociatedContextType = workItem.Fields.Contains("AssociatedContextType") ? workItem.Fields["AssociatedContextType"].Value : null,
AssociatedContext = workItem.Fields.Contains("AssociatedContext") ? workItem.Fields["AssociatedContext"].Value : null

に:

AssociatedContextType = workItem.Fields.Contains("Associated Context Type") ? workItem.Fields["Associated Context Type"].Value : null,
AssociatedContext = workItem.Fields.Contains("Associated Context") ? workItem.Fields["Associated Context"].Value : null
于 2016-12-06T07:36:21.133 に答える