我是MVC的新手并且进展顺利,但在后面的SQL等方面有点挣扎
select * from aspnet_Users
where Active = 1 and UserId in (select UserId from aspnet_UsersInRoles,aspnet_Roles where aspnet_Roles.RoleId = aspnet_UsersInRoles.RoleId and aspnet_Roles.RoleName = 'Auth Level 1')
表和字段是:
aspnet_Users (UserId int, Active bit, eMail varchar)
aspnet_UsersInRoles (UserId, RoleId)
aspnet_Roles (RoleId int, RoleName varchar)
我的尝试 - 但到目前为止看起来不完整:
LmsDataContext db = new LmsDataContext();
var AuthUsers = from aspnet_User in db.aspnet_Users
join userinroles in db.aspnet_UsersInRoles on aspnet_User.UserId equals userinroles.UserId
where aspnet_User.Active
select aspnet_User;
非常感谢提前
答案 0 :(得分:4)
假设您已在数据库(或设计器)中定义了关联,您应该能够通过属性访问相关实体,而无需借助显式连接。以下示例未经测试,但应该让您走上正确的轨道。基本思想是查找关联角色是否具有正确名称的关联,并选择用户(如果找到)。
var users = db.aspnet_Users
.Where( u => u.Active )
.Any( u => u.aspnet_UsersInRoles
.Any( r => r.aspnet_Roles.RoleName == "Auth Level 1" ) );
答案 1 :(得分:0)
感谢tvanfossen的快速回复,我试图实现你的方式,但无法做到正确。我认为你的方法很简洁,我得到以下工作:
// Loop through all the Users on the System who are in Auth Level 1 Role and Email them
LmsDataContext db = new LmsDataContext();
var AuthUsers = from aspnet_User in db.aspnet_Users
join userinroles in db.aspnet_UsersInRoles on aspnet_User.UserId equals userinroles.UserId
where aspnet_User.Active
&& userinroles.aspnet_Role.RoleName == "Auth Level 1"
select aspnet_User;
干杯
Ĵ