0

私には、デザイナーのグループとマネージャーのグループの 2 つのグループがあります。各デザイナーは、マネージャーの ID をプロフィールに保存しています。

マネージャーのリストをループして、すべてのデザイナーを彼らのために働かせたいと思います。

私の問題は、デザイナー プロファイル データに特別な方法でアクセスする必要があり、完全なデカルト積を作成したくないことです。そこで私が考えていたのは、ユーザー名 (文字列) とマネージャー ID (int) を格納するためのデータ型を作成することでした。これにアクセスしてすばやく検索できます。

このタイプのルックアップ機能には、どのデータ型をお勧めしますか?

編集:クラスの構造を変更することはできません。マネージャーでもデザイナーでもありません。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 に答える