Asp.net mvc 如何在Linq To SQL中编写此SQL查询?

Asp.net mvc 如何在Linq To SQL中编写此SQL查询?,asp.net-mvc,linq-to-sql,Asp.net Mvc,Linq To Sql,我是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') 表和字段包括:

我是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;

多谢提前

假设您在数据库(或设计器)中定义了关联,您应该能够通过属性访问相关实体,而无需诉诸显式联接。下面的示例未经测试,但应该会让您走上正确的道路。其基本思想是查找是否存在关联角色具有正确名称的关联,并在找到任何关联时选择用户

var users = db.aspnet_Users
              .Where( u => u.Active )
              .Any( u => u.aspnet_UsersInRoles
                          .Any( r => r.aspnet_Roles.RoleName == "Auth Level 1" ) );

假设您在数据库(或设计器)中定义了关联,则应该能够通过属性访问相关实体,而无需诉诸显式联接。下面的示例未经测试,但应该会让您走上正确的道路。其基本思想是查找是否存在关联角色具有正确名称的关联,并在找到任何关联时选择用户

var users = db.aspnet_Users
              .Where( u => u.Active )
              .Any( u => u.aspnet_UsersInRoles
                          .Any( r => r.aspnet_Roles.RoleName == "Auth Level 1" ) );

谢谢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;
干杯


谢谢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;
干杯

J