gpt4 book ai didi

c# - 在来自共享点的客户端对象模型上使用 Linq

转载 作者:可可西里 更新时间:2023-11-01 09:00:28 26 4
gpt4 key购买 nike

我正在尝试对从客户端对象模型获得的结果使用 LINQ。

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();

我得到:

{System.NotSupportedException: Invalid usage of query execution. The query should be executed by using ExecuteQuery method on the client context object.

但是,当我重写它以使用嵌套的 foreach 循环时,它工作正常。

从我的 linq 查询中可以看出,我没有使用任何未加载的属性。

最佳答案

抱歉发了 necroposting,但我刚遇到这个问题,无法在这里找到答案。您的 linq 查询失败的原因是客户端模型集合实现了多个迭代器。当您尝试枚举您的 rolesAssignments 时,您调用 IQueryable<T>扩展方法。这种方法(我假设)旨在通过一些封装的 soap 调用从服务器中提取数据,不应在客户端上使用。相反,您应该显式使用 IEnumerable<T> 的扩展方法.所以,这是行不通的:

var hasAdmin = rolesAssignments.Select(predicate);

这会起作用:

var hasAdmin = ((IEnumerable<RoleAssignment>)rolesAssignments).Select(predicate);

关于c# - 在来自共享点的客户端对象模型上使用 Linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9001916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com