// ======================================================================================== static methods public static IEnumerable<WorkspaceGroupList> GetWorkspaceGroupLists(User user) { // 1. query groups under workspaces var settings = new QuerySettings { EnableAutofilters = false }; var groups = SenseNet.Search.ContentQuery.Query("+TypeIs:Group +Workspace:*", settings).Nodes; // 2. select groups in which the current user is a member (Owner, Editor) var wsGroups = groups.Select(g => new WorkspaceGroup { Workspace = (g as SenseNet.ContentRepository.Group).Workspace, Group = (g as SenseNet.ContentRepository.Group) }); wsGroups = wsGroups.Where(wsg => user.IsInGroup(wsg.Group)); // 3. group by workspaces var wsGroupLists = from wsg in wsGroups orderby wsg.Workspace.DisplayName group wsg by wsg.Workspace into w select new WorkspaceGroupList { Workspace = w.Key, Groups = w }; return wsGroupLists; }