0

我有两组,一组是设计师,一组是经理。每个设计师都将其经理的 ID 存储在他的个人资料中。

我想遍历经理列表并让所有设计师为他们工作。

我的问题是需要以特殊方式访问设计师个人资料数据,我不想创建一个完整的笛卡尔产品。所以我想的是创建一个数据类型来存储用户名(字符串)和经理 ID(整数),我可以快速访问和查找。

对于这种查找功能,您会推荐什么数据类型?

编辑:我不能改变任何类的结构。不是经理,也不是设计师。我想要一些类似于SomeTypeLikeDictionary<int, string>int 是经理的 ID 和 string 是设计师的全名的东西。我想把它放在适合查找的集合类型中。示例:现在我正在查找为经理 ID 10 工作的所有设计师的姓名。

4

2 回答 2

0

使用 Chris Shain 的假定类型:

public class Designer { 
    public Int32 DesignerId { get; set; } 
    public Int32 ManagerId { get; set; } 
    public String DesignerName { get; set; } 
} 

并且,假设您有一个designers代表所有设计师的集合,您可以为此使用 linq:

Dictionary<int, IEnumerable<Designer>> designerLookup = designers
    .GroupBy(designer => designer.ManagerId)
    .ToDictionary(group => group.Key);
于 2012-04-09T22:59:04.617 回答
0

根据上面的评论,我将假设以下内容:

public class Manager {
    public Int32 ManagerId { get; set; }
    public String ManagerName { get; set; }
}

public class Designer {
    public Int32 DesignerId { get; set; }
    public Int32 ManagerId { get; set; }
    public String DesignerName { get; set; }
}

假设给定设计师的经理是静态的,我将修改经理类:

public class Manager {
    private List<Designer> _designers = new List<Designer>();
    public Int32 ManagerId { get; set; }
    public String ManagerName { get; set; }
    public IList<Designer> Designers { get { return _designers; } }
}

然后将管理器存储在KeyedCollection的子类中:

using System.Collections.ObjectModel;
public class ManagerList : KeyedCollection<Int32, Manager> {
    protected override int GetKeyForItem(Manager item)
    {
        return item.ManagerId;
    }
}

// Somewhere else
var managerList = new ManagerList();
var someManager = new Manager { ManagerId = 1, ManagerName="Bill Lundberg" };
managerList.Add(someManager);

foreach (var designer in myDesigners)
    managerList[designer.ManagerId].Designers.Add(designer);

当然,这一切都没有考虑到设计师管理方面的任何变化。这就是我问的原因:-)

于 2012-04-09T18:33:57.117 回答