2011-02-01 10 views
0

私はEF 4とASP.Net 4.0に同梱されているメンバーシッププロバイダを使用しています。EF - ナビゲーションプロパティの説明

特定の役割のすべてのユーザーを見つけて、List<ListItem>を使用してDropDownListを作成する必要があります。関与

データベーステーブルは、次のとおり

aspnet_Roles 
aspnet_Users 
aspnet_UsersInRoles 

aspnet_Usersからaspnet_Roles(使用ジャンクションテーブルaspnet_UsersInRoles)へのナビゲーションプロパティである:

myUser.aspnet_Roles 

マッチングRoleID(GUID)「CE44ED48-E9F9-49C6-9E15 "-E40EEFDC7479")

スクリプト:

 using (CmsConnectionStringEntityDataModel context = new CmsConnectionStringEntityDataModel()) 
     { 
      IQueryable<aspnet_Users> userQuery = from aspnet_Users in context.aspnet_Users select aspnet_Users; 
      IQueryable<aspnet_Roles> roleQuery = from aspnet_Roles in context.aspnet_Roles select aspnet_Roles; 
      List<ListItem> myListUsersInRoles = new List<ListItem>(); 
      foreach (aspnet_Users myUser in userQuery) 
      { 
      // PROBLEM HERE 
      if (myUser.aspnet_Roles.ToString() == "CE44ED48-E9F9-49C6-9E15-E40EEFDC7479") 
       myListUsersInRoles.Add(new ListItem(myUser.UserName.ToString(), myUser.UserId.ToString())); 

      uxListUsers.DataSource = myListUsersInRoles; 
      uxListUsers.DataBind(); 
     }` 

問題: IFは常にFALSEを返しますので、リスト<を設定することはできません。 私はいくつかのプロパティが間違っていると思います。

ご意見はありますか?御時間ありがとうございます。

答えて

1

myUser.aspnet_RolesつまりEntitySet<aspnet_Roles>(、役割のコレクションあるので、それはそれの文字列表現は、あなたがのID後にしている役割の文字列表現を一致させるために起こる可能性は非常に低いです。

いくつかがあります。方法は、あなたはそれを修正することができ一つは次のとおりです。

// ... 
if (myUser.aspnet_Roles.Any(r => r.RoleId.ToString() == "CE44ED48-E9F9-49C6-9E15-E40EEFDC7479")) 
// ... 

from y in x select yがちょうどxと同じであることに注意してください、あなたは

を書くことができるように10
foreach (aspnet_User myUser in context.aspnet_Users) 
// ... 

そして、userQueryまたはroleQueryと宣言してはいけません。 (あなたが実際にとにかくどこでもroleQueryを使用していないようです...)

また、あなたは役割にユーザーを取得するために、会員/ロールAPIを使用して見て可能性:

using System.Web.Security; // at the top of your file 
var usersInRole = Roles.GetUsersInRole("name of role here, NOT the guid"); 

(注)このことユーザーオブジェクトではなくユーザー名の配列を返します。ユーザーIDを取得するには少し余分な作業が必要ですが、それについて考えることができます。

+0

ありがとうございます。最後に、どのように動作するのか理解しました。私はif(myUser.aspnet_Roles.Any(r => r.RoleName == "CMS-AUTHOR"))を使用して、素晴らしい作業をしています!私はあなたも悲しいようにSystem.Web.Securityを使って試してみるでしょう。あなたの助けをもう一度ありがとう! – GibboK

+0

申し訳ありませんJohnさん、最後のことは...あなたにIQueryableの一般的な使用例を教えてください。私は本当に初心者です。ありがとう! – GibboK

関連する問題