Как мне кодировать этот SQL-запрос в Linq-To-SQL? - PullRequest
0 голосов
/ 15 ноября 2009

Я новичок в 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;

Большое спасибо заранее

Ответы [ 2 ]

4 голосов
/ 15 ноября 2009

Предполагая, что у вас есть ассоциации, определенные в базе данных (или в конструкторе), вы должны иметь возможность получить доступ через свойства к связанным объектам, не прибегая к явным объединениям. Следующий пример не проверен, но должен поставить вас на правильный путь. Основная идея состоит в том, чтобы найти, есть ли какие-либо ассоциации, в которых связанная роль имеет правильное имя, и выбрать пользователя, если таковые найдены.

var users = db.aspnet_Users
              .Where( u => u.Active )
              .Any( u => u.aspnet_UsersInRoles
                          .Any( r => r.aspnet_Roles.RoleName == "Auth Level 1" ) );
0 голосов
/ 15 ноября 2009

Спасибо 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...