2

我的情况是这样的:我有一个 TFS 更改集列表。每个变更集都有一个 ID 和一个相关工作项的列表。一个工作项有一个 ID 和一个链接列表,它们基本上是带有变更集 ID 的字符串。

我想要一个具有反向层次结构的列表,这意味着,我想要一个工作项列表,并且每个工作项都有一个相关更改集的列表(并保留两者的 ID 字段)。

现在的结构:

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

我想要的结构

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

3 回答 3

2

你可以使用 linq 来做到这一点....

changesets.SelectMany(x => x.workitems.Select(y => new {
                                                         changeset = x.id,
                                                         workitem=y.id})
          .GroupBy(x => x.workitem)
          .Select(x => new {
                              workitem = x.Key, 
                              Changesets = x.Select(y = > y.changeset).ToArray()
                           }).ToArray();
于 2013-10-17T14:36:00.280 回答
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 回答
0
public class ChangeSet
{
  IList<WorkItem> WorkItems {get;set;};
}

public class WorkItem
{
  IList<ChangeSet> ChangeSets{get;set;};
}

两者都相当容易,迭代您的变更集或工作项并打印出它们的内容。

foreach(var workitem in workItems)
{
  WriteOut(workItem);
  WriteOut(workItem.ChangeSets);
}
于 2013-10-17T14:36:38.720 回答