2009-11-15 5 views
0

Je suis nouveau MVC et son va bien, mais un peu de mal avec l'arrière vers l'avant SQL, etcComment coder cette requête SQL dans Linq-To-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') 

Tables et champs sont:

aspnet_Users (UserId int, Active bit, eMail varchar) 
aspnet_UsersInRoles (UserId, RoleId) 
aspnet_Roles (RoleId int, RoleName varchar) 

Ma tentative - mais semble incomplète comme celui-ci jusqu'à présent:

 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; 

Un grand merci à l'avance

Répondre

0

Merci tvanfossen pour la réponse rapide, j'ai essayé de mettre en œuvre votre chemin, mais je ne pouvais pas le faire correctement. Je pense que votre approche est plus propre bu tI a ce qui suit pour travailler:

// 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; 

Vive

J

4

Assumin Si vous avez les associations définies dans la base de données (ou le concepteur), vous devriez pouvoir accéder via les propriétés aux entités associées sans recourir à des jointures explicites. L'exemple suivant n'est pas testé, mais devrait vous mettre sur la bonne voie. L'idée de base est de trouver s'il existe des associations où le rôle associé a le nom correct et choisir l'utilisateur s'il y en a.

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

+1 Voilà ce que j'ai essayé d'écrire. Tu es plus rapide :) –

Questions connexes