2016-08-13 4 views
0

Ich habe eine Abfrage für alle Benutzer, die wie folgt aussieht:Wie verwende ich ein HashSet in meiner LINQ-Abfrage?

from 
    u in db.AspNetUsers 
orderby 
    u.UserName 
select 
    ....

Das funktioniert gut. Aber jetzt möchte ich nach einer bestimmten Benutzerrolle filtern. Es gibt eine u.AspNetRoles, die ein HashSet von Objekten ist. Jedes Objekt verfügt über eine Name-Eigenschaft, bei der es sich um den Namen der Rolle handelt.

Also ich möchte nur Benutzer auswählen, die ein Rollenobjekt mit Name gleich "SuperAdmin" haben.

Bisher habe ich nur versucht, die Tabellen mit den Rollendaten zu verbinden, aber das hat nicht funktioniert, weil es eine AspNetUserRoles-Tabelle gibt, die nur eine UserID und eine RoleID ohne Primärschlüssel hat. Und es wird vermutlich nicht empfohlen, eine Entitätsklasse für eine Tabelle zu erstellen, die keinen Primärschlüssel hat.

+0

Zur Klarstellung: Sie wollen nur Benutzer finden, die sich in der Rolle "SuperAdmin" befinden, oder? – DWright

+0

ja, das ist richtig. – Ryan

Antwort

2

Ich denke, das tut, was Sie fragen:

from 
    u in db.AspNetUsers 
where 
    u.AspNetRoles.Any(r => r.Name == "SuperAdmin") 
orderby 
    u.UserName 
select 
    . . . 

Die Any Methode true zurück, wenn eines der Elemente in der Sammlung das Kriterium Lambda erfüllen (r => r.Name == "SuperAdmin", in diesem Fall). Wenn Elemente in der Sammlung AspNetRoles des Benutzerobjekts u über eine Name mit dem Wert "SuperAdmin" verfügen, ist das Ergebnis Any wahr. Wenn keines der Elemente das Kriterium erfüllt, gibt Any false zurück.

+0

danke Mann, genau was ich wollte. – Ryan

Verwandte Themen