2017-03-15 5 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(); 
    } 

그러나 표시 이름이 "표시 *"로 시작하는 사용자 만 원합니다. 이것이 가능한가? 내가 어떻게 그럴 수 있니?

답변

0

필터링하려면 linq를 사용하십시오.

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

"Mark"로 시작하는 사용자 만 반환합니다. 희망이 도움이됩니다.

+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