2009-08-05 8 views
1

Je viens de terminer la création d'un fournisseur de rôles personnalisé en utilisant LINQ to SQL pour l'accès aux données. L'une des fonctions que vous devez écrire pour le fournisseur consiste à supprimer les utilisateurs des rôles.LINQ to SQL Plusieurs à plusieurs requêtes de comparaison

public void RemoveUsersFromRoles(string[] usernames, string[] rolenames); 

Maintenant, une approche serait;

  1. retour une liste des rôles
  2. itérer pour chaque rôle et de supprimer ce rôle de tous les utilisateurs qui ont ce rôle

Cette approche est loin d'être efficace, je voudrais savoir s'il y a mieux façons de gérer ce type de problème dans LINQ to SQL.

Existe-t-il un moyen de créer une instruction select dans LINQ to SQL qui prendra un tableau de chaînes pour la comparaison, au lieu de faire une boucle et de faire N nombre de sélections? Toute approche mieux que ce que j'ai décrit ci-dessus serait très appréciée.

Tables: Impliqué

User (RecordID, Username) 
Role (RecordID, Rolename) 
UsersInRole (RoleID,UserID) 

Merci!

Répondre

4

Cela devrait fonctionner:

var uirQuery = from uir in db.UsersInRole 
       join u in db.User on uir.UserID equals u.RecordID 
       join r in db.Role on uir.RoleID equals r.RecordID 
       where usernames.Contains(u.Username) 
        && rolenames.Contains(r.Rolename) 
       select uir; 

db.UsersInRole.DeleteAllOnSubmit(uirQuery); 

LINQ to SQL traduit l'expression "Contient" à T-SQL clause IN.

+0

Juste pour améliorer votre code: J'écrirais facilement les mots complets dans cette requête pour la rendre plus * lisible *: u => utilisateur, r => rôle, uir => usersInRole. –

+0

Je devrais toujours boucler cette requête pour chaque utilisateur et rôle? – Lukasz

+0

Non .. cette requête renverrait tous les enregistrements UsersInRole qui correspondaient à n'importe quelle combinaison de rôle utilisateur + comme spécifié dans les arguments de votre méthode. Vous exécuterez la requête une seule fois pour obtenir (ou supprimer, comme dans mon exemple) les enregistrements pertinents. –

Questions connexes