Mithilfe von Linq auf einem Client-Objekt-Modell Ergebnis von sharepoint
Ich versuche, mit LINQ auf ein Ergebnis bekomme ich vom Client-Objekt-Modell.
var rolesAssignments = context.Web.RoleAssignments;
context.Load(rolesAssignments,
roles => roles.IncludeWithDefaultProperties(role => role.Member,
role => role.RoleDefinitionBindings));
context.ExecuteQuery();
var hasAdmin = rolesAssignments.Select(x => x.RoleDefinitionBindings.Cast<RoleDefinition>().Select(y => y.RoleTypeKind == RoleType.Administrator)).Any();
Bekomme ich:
{System.NotSupportedException: Ungültige Verwendung von query-Ausführung. Die Abfrage ausgeführt werden soll, indem Sie mithilfe der ExecuteQuery-Methode auf dem client-Kontext-Objekt.
Allerdings, wenn ich diese umschreiben die Verwendung einer geschachtelten foreach-Schleife, funktioniert es einwandfrei.
Aus, was ich sehen kann von meinem linq-Abfrage, ich bin nicht mit allen Eigenschaften, die das ist nicht geladen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist aus der Spitze von meinem Kopf, aber es sollte Ihnen die Idee. Sie können sich eine Beschwerde über die Verwendung in der Abfrage. Wenn ja, entfernen Sie es und überprüfen Sie dann hasAdmin.Alle ( - ) nach dem ExecuteQuery abgeschlossen ist.
Sorry fürs necroposting, aber ich habe gerade konfrontiert dieses Problem und war nicht in der Lage, eine Antwort zu finden hier.
Der Grund, warum Ihr linq-Abfragen fehlgeschlagen ist, ist client-Modell-Kollektionen umgesetzt, mehrere Iteratoren. Und wenn Sie versuchen aufzuzählen Ihre rolesAssignments rufen Sie
IQueryable<T>
Erweiterung Methoden. Diese Methoden (ich nehme an) konzipiert, um ziehen die Daten vom server über einige incapsulated soap-Aufrufe und nicht verwendet werden sollte, auf den client. Einengen sollte man explizit Erweiterung Methoden derIEnumerable<T>
.So, das wird nicht funktionieren:
Und dies funktioniert: