2017-03-15 4 views
0

Ich habe ein Problem beim Abrufen von Benutzern aus einer Sharepoint-Gruppe über CSOM C#. Ich bin zur Zeit das Abrufen alle Benutzer über CSOM mit meinem Code untenWie kann ich eine Liste von Benutzern aus einer Sharepoint-Gruppe über CSOM abrufen, mit der die Anzeigenamen von Benutzern beginnen?

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

Aber ich nur Benutzer wollen, wo mit displayname „Mark *“ beginnt. Ist das möglich? Wie könnte ich das tun?

Antwort

0

Verwenden Sie linq zum Filtern.

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

Dies gibt nur den Benutzer zurück, dessen Name mit "Mark" beginnt. Hoffe das hilft.

+0

Vielen Dank. Aber in diesem muss ich alle Benutzer von der Gruppe zuerst in Speicher holen und dann die linq Abfrage auf diesem Gegenstand tun. Aber ich will das verhindern und bekomme nur die Benutzer aus der SP-Gruppe, die mit "mark *" beginnen, so dass ich nur sagen muss, sagen wir 5 Benutzer statt 1000. – STORM

0

Ja. Du kannst so kommen.

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

Versuchen Sie es und lassen Sie mich wissen.

+0

Danke, aber diese Zeile lädt nicht immer alle Benutzer 'context.Load (Gruppe, grp => grp.Title, grp => grp.Users);' – STORM

Verwandte Themen