0

主キーとして Id を持つユーザーという名前のテーブルと、主キーとして Id を持つ別のテーブル Roles という名前のテーブルと、2 つの外部キー User_Id と Role_Id を持つ UserRoles という名前のテーブルがあります。

私のコードでは、次のように Role という名前のクラスがあります。

public partial class Role
{
   public virtual int Id {get;set;}
   public virtual string RoleName {get;set;}
}

そして、 User という名前の別のクラスを次のように持っています。

public partial class User
{
    private ICollection<Role> _userRoles;

    ...All Properties...
    public virtual ICollection<Role> UserRoles
    {
        get { return _userRoles ?? (_userRoles = new List<Role>()); }
        protected set { _userRoles = value; }
    }
}

クラスのマッピングは適切に定義されているため、ユーザーを取得すると、そのユーザーが属するロールを取得できます。ここで、グリッド リストにロールのリストを表示し、各ロールに対してユーザー数を表示したいと考えています。

join を使用しようとしましたが、結果に到達できませんでした。

それを行うための最良の方法は何ですか?前もって感謝します

4

3 に答える 3

2

Linq で Aggregate 関数を使用できます。

        var users = new List<User>();
        var roles = new List<Role>();
        //Populate users and roles

        var rolesAndUsers = new Dictionary<Role, List<User>>();

        users.Aggregate(rolesAndUsers, (d, u) =>
                                           {
                                               ICollection<Role> userRoles = u.UserRoles;
                                               foreach (var userRole in userRoles)
                                               {
                                                   if (!d.ContainsKey(userRole))
                                                       d.Add(userRole, new List<User>());
                                                   d[userRole].Add(u);
                                               }
                                               return d;
                                           });
于 2013-06-05T12:20:40.217 に答える