2014-09-27 13 views
8

ich diese AusgabeAbrufen einer Liste der Benutzer mit den ihnen zugewiesenen Rolle in Identity 2

Id | Name | Role 
---------------------------- 
1 | John | Administrator 
---------------------------- 
2 | Mary | Manager 
---------------------------- 
3 | Sage | Editor 
---------------------------- 
4 | Hank | Manager 

Ich kann es in LINQPad funktioniert, zu bekommen bin stecken versuchen, aber irgendwie nicht in der Lage bin ich es zu ASP.NET übersetzen MVC.

from u in Users 
from ur in u.Roles 
join r in Roles on ur.RoleId equals r.Id 
select new { 
    Id = u.Id, 
    Name = u.Name, 
    Role = r.Name, 
} 

Wie kann ich das in ASP.NET MVC 5 mit Identity LINQ?

Nur um klar zu sein, ich bin auf der Suche nach der JOIN-Abfrage zwischen Benutzern und Rollen.

+0

Sie Sie diese Ausgabe auf Konsole wollen oder es in der Indexliste in Razor Ansichten ? – Yoda

+0

Ich möchte es zu einer Ansicht in einem Controller –

Antwort

9

Wenn Sie ASP.NET Identität 2 verwenden, müssen Sie einige Codes zu AccountContoller hinzufügen. Fügen Sie ActionResult hinzu, um UserList zu erhalten. Sie nedd auch ApplicationDbContext Instanz und bekommen es von OwinContext:

public class AccountController : Controller 
{ 
    private ApplicationUserManager _userManager; 
    private ApplicationSignInManager _signInManager; 

    public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager) 
    { 
     UserManager = userManager; 
     SignInManager = signInManager; 
    } 

    public ActionResult UserList() 
    { 
     var applicationDbContext = HttpContext.GetOwinContext().Get<ApplicationDbContext>(); 
     var users = from u in applicationDbContext.Users 
        from ur in u.Roles 
        join r in ApplicationDbContext.Roles on ur.RoleId equals r.Id 
        select new 
        { 
         u.Id, 
         Name = u.UserName, 
         Role = r.Name, 
        }; 

      // users is anonymous type, map it to a Model 
      return View(users); 
    } 
    . 
    . 
    . 
} 

aktualisieren - wenn Benutzer mehrere Rollen hat:

from user in applicationDbContext.Users 
select new 
{ 
    user.Id, 
    user.UserName, 
    Roles = applicationDbContext.Roles.Where(r => user.Roles.Select(ur => ur.RoleId).Contains(r.Id)).Select(r => r.Name) 
} 
+2

Das sieht gut aus, aber was ist, wenn ein Benutzer mehrere Rollen hat? – RoLYroLLs

-4

Wenn Sie ASP.NET-MVC neu sind, gehen Sie zum Projektmappen-Explorer, klicken Sie mit der rechten Maustaste auf Controller-Ordner, Controller hinzufügen, wählen Sie Controller mit Lese-/Schreibaktionen mit Entity-Framework, wählen Sie ApplicationUser, stellen Sie sicher, dass erstellen Ansichten ist ausgewählt, dann ok.

Sie werden viel mehr bekommen, als Sie verlangen, aber der Teil, den Sie brauchen, wird in Index Methode und Index.csthml sein, aber Sie werden eine Menge lernen.

Wenn Sie nicht verwenden möchten, übergeben Sie einfach return View(dbContext.Users.ToList()) an die Ansicht, aber dann könnte Ihre nächste Frage sein, wie Sie es anzeigen, so dass es besser sein könnte, die erste Lösung zu versuchen.

Ihre Index-Seite bei Link wird localhost:port/ApplicationUsers

+0

Any lucK zurückgeben? 3 mehr zu gehen – Yoda

+0

Diese Antwort hat nichts mit meiner Frage zu tun =) Ich frage, wie man eine LINQ Join mit Identity-Rollen. –

+0

@FrankieYale Es gibt keinen Platz in Ihrem OP, wo Sie das fragen. – Yoda

Verwandte Themen