2017-03-15 11 views
0

CSOM C#経由で共有グループからユーザーを取得する際に問題があります。私は現在CSOM経由ですべてのユーザーを取得していますCSOM経由でsharepointグループからユーザリストを取得するにはどうしたらよいですか?

public List<SPUser> GetGroupMembers(string groupName) 
    { 
     var appContext = _sharePointService.AppContext; 
     Group group = appContext.Web.SiteGroups.GetByName(groupName); 

     appContext.Load(group, grp => grp.Title, grp => grp.Users); 
     appContext.ExecuteQuery(); 

     List<ClientResult<PrincipalInfo>> principalsResults = new List<ClientResult<PrincipalInfo>>(); 
     foreach (var user in group.Users) 
     { 
      principalsResults.Add(Utility.ResolvePrincipal(appContext, appContext.Web, user.LoginName, PrincipalType.User, PrincipalSource.All, null, false)); 
     } 
     appContext.ExecuteQuery(); 

     List<SPUser> spUsers = new List<SPUser>(); 
     foreach (var principalResult in principalsResults) 
     { 
      spUsers.Add(_spPrincipalFactory.Get(principalResult.Value)); 
     } 

     return spUsers.OrderBy(u => u.Name).ToList(); 
    } 

ただし、displaynameが "Mark *"で始まるユーザーのみが必要です。これは可能ですか?どうすればいい?

答えて

0

フィルタリングするのにlinqを使用してください。

spUsers = spUsers.Where(itm => itm.Name.Trim().ToUpper().StartsWith("MARK")).ToList(); 

「マーク」で始まる名前のユーザーのみが返されます。お役に立てれば。

+0

ありがとうございます。しかし、私はこのグループのすべてのユーザーを最初にメモリに取得し、このオブジェクトに対してlinqクエリを実行する必要があります。しかし、私はこれを防止し、 "mark *"で始まるspグループのユーザーのみを取得し、取得する必要があるので、1000の代わりに5人のユーザーを指定したいと考えています。 – STORM

0

はい。あなたはこのようにすることができます。

using (context = new ClientContext("SiteUrl")) 
      { 
       foreach (char c in "Password") securePassword.AppendChar(c); 
       context.Credentials = new SharePointOnlineCredentials("[email protected]", securePassword); 
       context.Load(context.Web, w => w.ServerRelativeUrl, w => w.Url); 
       context.ExecuteQuery(); 
       Microsoft.SharePoint.Client.Group group = context.Web.SiteGroups.GetByName("GroupName"); 
       context.Load(group, grp => grp.Title, grp => grp.Users); 
       context.ExecuteQuery(); 
       List<User> lstUser = new List<User>(); 
       lstUser = group.Users.Where(itm => itm.Title.Trim().ToUpper().StartsWith("TEST")).ToList(); 
      } 

お試しください。

+0

ありがとうございます。 'context.Load(group、grp => grp.Title、grp => grp.Users);' – STORM

関連する問題