多个查询 context.Load SP O365

Multiple Querys context.Load SP O365

我需要检索很多 User PersonProperties,我想知道是否可以将它们一起加载。

例如:

var userList = web.SiteUserInfoList.GetItems(CamlQuery.CreateAllItemsQuery());
clientContext.Load(userList);
clientContext.ExecuteQuery();

PeopleManager pm = new PeopleManager(clientContext);
List<PersonProperties> users = new List<PersonProperties>();

 foreach (ListItem u in userList)
 {
      var personProperties = pm.GetPropertiesFor(u.FieldValues["Name"].ToString());
      users.Add(personProperties);
 }

 clientContext.Load(users); //load all users[i].UserProfileProperties and PictureUrl
 clientContext.ExecuteQuery();

我的应用程序是 ProviderHosted,适用于 SharePoint Online 2013

感谢您的宝贵时间。

由于 SharePoint CSOM 支持 Request Batching,您可以利用此功能并考虑以下示例,该示例演示了如何向服务器提交 两个 请求,以便:

  • 检索站点用户
  • 检索站点用户的配置文件属性

示例:

    //1.Load site users
    var siteUsers = ctx.Web.SiteUsers;
    ctx.Load(siteUsers);
    ctx.ExecuteQuery();
    //2.Load user profile properties for site users
    var pm = new PeopleManager(ctx);
    var results = new Dictionary<string,PersonProperties>();
    foreach (var siteUser in siteUsers)
    {
         var personProperties = pm.GetPropertiesFor(siteUser.LoginName);
         ctx.Load(personProperties);
         results.Add(siteUser.LoginName,personProperties);
    }
    ctx.ExecuteQuery();

用法

foreach (var result in results)
{
     var userLoginName = result.Key;
     var userProperties = result.Value;
     Console.WriteLine("{0} ({1})",userLoginName, userProperties.Email);
}