2010-12-09 32 views
2

Quel est le problème avec ma requête ci-dessous? Ceci utilise les tables d'adhésion standard.MVC Linq sélection d'une liste d'utilisateurs avec le rôle de

var clientRole = rushDB.aspnet_Roles.Single(r => r.LoweredRoleName == "client"); 
     //var users = rushDB.aspnet_Users.Where(u => u.aspnet_Roles.Contains(client)).AsEnumerable(); 

     var users = from u in rushDB.aspnet_Users 
         where u.aspnet_Roles.Contains(clientRole) 
        select u; 

     return View(users.ToList()); 

Je reçois cette erreur sur mon point de vue ... Impossible de créer une valeur constante de type « RushToIt.Models.aspnet_Roles ». Seuls les types primitifs ('tels que Int32, String et Guid') sont pris en charge dans ce contexte.

Répondre

2

Je m'attendrais à ce que vous essayiez (ou plutôt que LINQ essaie) d'utiliser le clientRole comme une clause where à une instruction select. Vous pouvez seulement envoyer des types simples sont des paramètres. A la place, vous devrez évaluer le rôle en ligne.

Cependant, il est probablement plus facile de traverser en sens inverse (ça sonne bien, non?). Vous devriez être capable de faire ceci:

var clientRole = rushDB.aspnet_Roles.Single(r => r.LoweredRoleName == "client"); 
return View(clientRole.aspnet_Users.ToList()); 
+0

Légende mate. Exactement ce que je cherchais. J'aimerais que tu me dises ça il y a 3 heures lol. – Dang

+0

Excellent, merci! – jasongullickson