ruf*_*fen 10 c# linq sharepoint-2010
我试图在客户对象模型得到的结果上使用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();
Run Code Online (Sandbox Code Playgroud)
我明白了:
{System.NotSupportedException:查询执行的使用无效.应该使用客户端上下文对象上的ExecuteQuery方法执行查询.
但是,当我重写它以使用嵌套的foreach循环时,它工作正常.
从我的linq查询中可以看到,我没有使用任何未加载的属性.
Tom*_*mmi 15
对不起necroposting,但我刚刚遇到这个问题,但无法在这里找到答案.您的linq查询失败的原因是客户端模型集合实现了多个迭代器.当您尝试枚举您的rolesAssignments时,您会调用IQueryable<T>扩展方法.这个方法(我假设)旨在通过一些封装的soap调用从服务器提取数据,不应该在客户端上使用.你应该明确使用扩展方法IEnumerable<T>.所以,这不起作用:
var hasAdmin = rolesAssignments.Select(predicate);
Run Code Online (Sandbox Code Playgroud)
这将工作:
var hasAdmin = ((IEnumerable<RoleAssignment>)rolesAssignments).Select(predicate);
Run Code Online (Sandbox Code Playgroud)
这不是我的想法,但它应该能给你一个想法。您可能会收到有关在查询中使用 Any 的投诉。如果是这样,请将其删除,然后在 ExecuteQuery 完成后检查 hasAdmin.Any() 。
var query = rolesAssignments.Select(x => x.RoleDefinitionBindings.Cast<RoleDefinition>().Select(y => y.RoleTypeKind == RoleType.Administrator)).Any();
var hasAdmin = context.LoadQuery(query);
context.ExecuteQuery();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8841 次 |
| 最近记录: |