2

私の状況は次のとおりです。TFS 変更セットのリストがあります。各変更セットには ID と、関連する作業項目のリストがあります。ワークアイテムには ID と、基本的には変更セット ID を持つ文字列であるリンクのリストがあります。

逆階層のリストが必要です。つまり、作業項目のリストが必要で、それぞれに関連する変更セットのリストが必要です (両方の ID フィールドを保持します)。

現在の構造:

---chageset1
       |
       |-------workitem1
       |-------workitem2
---chageset2
       |
       |-------workitem2
       |-------workitem3

欲しい構造

---workitem1
       |
       |-------chageset1
---workitem2
       |
       |-------chageset1
       |-------chageset2
---workitem3
       |
       |-------chageset2
4

3 に答える 3

2
WorkItem w1 = new WorkItem { Name = "w1" };
WorkItem w2 = new WorkItem { Name = "w2" };
WorkItem w3 = new WorkItem { Name = "w3" };
ChangeSet c1 = new ChangeSet { Name = "c1", WorkItems = new List<WorkItem> { w1 } };
ChangeSet c2 = new ChangeSet { Name = "c2", WorkItems = new List<WorkItem> { w3, w2 } };
ChangeSet c3 = new ChangeSet { Name = "c3", WorkItems = new List<WorkItem> { w3 } };
List<ChangeSet> changeSets = new List<ChangeSet> { c1, c2, c3 };
var result = changeSets
    .SelectMany(c => c.WorkItems)
    .Distinct()
    .ToDictionary(w => w,
                  w => changeSets.Where(c => c.WorkItems.Contains(w)));
foreach (var kvp in result)
{
    var workItem = kvp.Key;
    var changeSetsForWi = kvp.Value;
    Console.WriteLine(workItem.Name);
    foreach (var cs in changeSetsForWi)
    {
        Console.WriteLine("  " + cs.Name);
    }
}
于 2013-10-17T14:31:46.077 に答える