[英]EntityDataSource create a where clause
使用此类:
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;}
}
我需要在一个ListBox中显示可用角色,而在其他ListBox中显示用户已经拥有且不能重复的角色。 我在后面的代码中做到了这一点:
//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来实现,但是我不知道该怎么做。 请任何人能帮助我,我将不胜感激,谢谢。
通过EntityDataSource,您可以使用.Where属性指定过滤器。 请注意,该过滤器位于ESql中(有关ESql的更多详细信息,请参见: http : //msdn.microsoft.com/zh-cn/library/bb399560 )。 EntityDataSource与ObjectContext本身一起工作,而不与DbContext一起工作。 您可以使用以下方法获取DbContext的ObjectContext实例:
var objectContext = ((IObjectContextAdapter)myDbContext).ObjectContext;
要将自己的对象上下文提供给EntityDataSource控件,您需要处理OnContextCreating事件,并将从DbContext实例获取的上下文分配给EntityDataSourceContextCreatingEventArgs.Context属性。 详细信息如下:
http://msdn.microsoft.com/zh-CN/library/system.web.ui.webcontrols.entitydatasource.contextcreating
下面是如何在EntityDataSourceControl使用。凡一个例子: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.entitydatasource.where.aspx和另一个对一般过滤: http://msdn.microsoft.com/en-us/library/cc488531
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.