0

このクラスで:

class User
{
int UserId{get;set;}
string UserName{get;set;}
}

class Role
{
int RoleId{get;set;}
string RoleName{get;set;}
}

class User_Role
{
int UserId{get;set;}
int RoleId{get;set;}
}

1つのリストボックスに使用可能なロールを表示し、他のリストボックスにユーザーがすでに持っているロールと繰り返すことができないロールを表示する必要があります。私は背後のコードでこれを行いました:

//Initialize the ObjectContext
MyDbContext ctx = new MyDbContext();
int userId; //some value pass by url;
var listRolesIds = (ctx.Roles.Select(r => r.RoleId )).ToList();
var listRolesIdsAsigned = ctx.User_Role.Where(u => u.UserId == userId).Select(u => new {u.UserId}).ToList();

var listRolesIdsAvailables = listRoles.Except(listRolesAsigned);

//once i have the ids, code for Bind the ListBox with the availables roles

それは機能しますが、維持するのが難しく、EntityDataSourceで作成するのが好きですが、その方法がわかりません。誰かが私を助けてくれるなら、私は感謝します、ありがとう。

4

1 に答える 1

0

EntityDataSource では、.Where プロパティを使用してフィルターを指定できます。フィルターは ESql であることに注意してください (ESql の詳細: http://msdn.microsoft.com/en-us/library/bb399560 )。EntityDataSource は、DbContext ではなく ObjectContext でネイティブに機能します。以下を使用して、DbContext の ObjectContext インスタンスを取得できます。

var objectContext = ((IObjectContextAdapter)myDbContext).ObjectContext;

独自のオブジェクト コンテキストを EntityDataSource コントロールに提供するには、OnContextCreating イベントを処理し、DbContext インスタンスから取得したコンテキストを EntityDataSourceContextCreatingEventArgs.Context プロパティに割り当てる必要があります。詳細は次のとおりです。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.entitydatasource.contextcreating

EntityDataSourceControl で .Where を使用する方法の例を次に示します: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.entitydatasource.where.aspx および一般的なフィルタリングに関する別の例: http://msdn.microsoft.com/en-us/library/cc488531

于 2012-06-01T16:42:06.600 に答える