Entity Framework - Linq-Abfragen, in denen Wert in einer Liste

Bin ich mit Entity Framework auf .NET 3.5 und ich kann nicht für das Leben von mir herauszufinden, wie einige schreiben Linq to durchqueren Sie die folgenden design:

Grundsätzlich bin ich versucht, herauszufinden, ob ein Benutzer die Berechtigung hat (EntityAction) für eine bestimmte EntityType. Jetzt können Benutzer und Rollen verwaltet werden, die in Active Directory - doch kann das system eine Suche, um herauszufinden, welche Rolle/Gruppen ein Benutzer gehört.

Nehmen wir an ich habe folgende Daten:

EntityType

EntityTypeId: 1

Name: Entity Eines

Benutzer

UserId: 1

AccountName: Andez

Rolle

RoleId: 1

AccountName: MyRole

EntityAction

EntityActionId: 1

Name: Nur etwas tun,

RoleEntityActionAssociation

(Zusammenhang zwischen Rolle und EntityAction)

EntityActionId: 1

RoleId: 1

Ich bin die Speicherung von Gruppen-Namen für die Benutzer (Active Directory) in einer Liste:

List<string> groupNames = new List<string>();

Frage

Aber ich werde versuchen, Stück zusammen etwas Linq, um herauszufinden, ob ein Benutzer (oder eine der Rollen, die er ist zugewiesen, in der Liste mit Gruppennamen bis) ist im Zusammenhang mit einem bestimmten EntityAction gegeben, EntityType.

//get reference to the user
User user = context.Users.Where(x => x.AccountName == "Andez").FirstOrDefault();

//get reference to the entity type we want to query
EntityType et = context.EntityTypes.Where(x => x.Name == "Entity One").FirstOrDefault();

//get list of all entity actions for the user
var result = from ea in et.EntityActions
             where ea.EntityActionId == 1 && (ea.Users.Contains(user) || ea.Roles.Count(r => groupNames.Contains(r.AccountName)) > 0)
             select ea;

Natürlich meine Abfrage funktioniert nicht, oben - es wird keine Ergebnisse zurück (Ergebnis:.ToList().Count == 0)

Brauche ich Zeiger auf diese bitte.

Dank

Entity Framework - Linq-Abfragen, in denen Wert in einer Liste

  • Vermeiden Sie die Verwendung von FirstOrDefault, wenn Sie erwarten, dass ein und nur ein Ergebnis und ein Fehler ergeben, wenn es nicht gefunden wird, verwenden .Single()
InformationsquelleAutor Andez | 2013-05-08
Schreibe einen Kommentar