2011-01-02 10 views
7

"GetUsersInRoles"を実行する必要があります。つまり、少なくとも1つの役割を持つすべてのMembershipUserをロールセットで検索したいのですが、私の頭をこの周りに置いているようです。asp.net c#メンバーシップ:GetUsersInRoles(複数の役割)の操作方法H

私はGetUsersInRole、Membership.GetAllUsers()、Linqを持っていますが、どうですか?

すべてのフィードバックが大幅にありGetUsersInRolesなどの方法がありませんが、あなたが必要なロールを介してGetUsersInRoleとループを使用する必要があります

トミー

+0

これは、ストアドプロシージャに書き込むのに約10秒かかっていました。 –

答えて

10

ここでLINQのバージョンだ、それだけで同様のメンバーシップ法(FindUsersByEmailFindUsersByName)のようなMembershipUserCollectionを返します。それはforeachの副作用に依存しているので、それは非常にきれいではありません。

また
public static MembershipUserCollection FindUsersByRole(string[] roles) 
    { 
     MembershipUserCollection msc = new MembershipUserCollection(); 

     roles.Select(role => Roles.GetUsersInRole(role)) 
     .Aggregate((a, b) => a.Union(b).ToArray()) 
     .Distinct() 
     .Select(user => Membership.GetUser(user)) 
     .ToList().ForEach(user => msc.Add(user)); 

     return msc; 
    } 

たMembershipUserのリストが行います場合:

public static List<MembershipUser> FindUsersByRole(string[] roles) 
    { 
     var userList = roles.Select(role => Roles.GetUsersInRole(role)) 
          .Aggregate((a, b) => a.Union(b).ToArray()) 
          .Distinct() 
          .Select(user => Membership.GetUser(user)) 
          .ToList(); 
     return userList; 
    } 

そして最後に、あなただけの1を選択するには、スキップすることができ、ユーザ名が必要な場合:

+0

すべてのあなたの応答と迅速な答えに感謝します。残念ながら、私は評判のポイントが自分自身を欠いているので、「有用性」のポイントを追加することはできません。 – tommyp

1

を高く評価しています。ここでは複雑しかし

ビットが一つの方法です:

string[] roles = {"role1", "role2" }; 
     string[] tempusers = new string[]{}; 
     List<string> users = new List<string>(); 
     foreach (string role in roles) 
     { 
      string[] usersInRole = Roles.GetUsersInRole(role); 
      users = tempusers.Union(usersInRole).ToList(); 
      tempusers = users.ToArray(); 
     } 
     foreach (string user in users) { Response.Write(user + "<br/>"); } 
+0

右 - それは私がやっている、Linqを使用して良い方法を探しています。 – tommyp

1

本当にASP.Netメンバーシッププロバイダー単一の役割に縛られているユーザーのことを考えて構築されているように見えます。しかし、私たちが取り組んできたプロジェクトには同様の設定がありました。その厄介な少しが、私たちのために働いていた、このような何かを試してみてください。

List<string> roleset_to_find = new List<string>() {"RoleA","RoleB"}; 

List<string> membersFound = new List<string>(); 

foreach (string role in roleset_to_find) 
{ 
     membersFound.AddRange(Roles.GetUsersInRole(role)); 
} 
関連する問題