London Dev Meetup Rescheduled! Due to unavoidable reasons, the event has been moved to 21st May. Speakers remain the same—any changes will be communicated. Seats are limited—register here to secure your spot!

Using Query to find users belonging to one of two groups

Vote:
 

I can't really get my UserQuery working as I want. What I want is to select all users belonging to group 1 or 4. 

I should use the GroupsCollectionCriterion but how do I get it to query for group 1 or 4?

 

#38694
Apr 19, 2010 11:32
Vote:
 

Hi,

As you're saying you can use the GroupCollectionCriterion. Here's an example of how you can get all users belonging to group 1 or 4:

            List groupIds = new List{ 1, 4 };

            UserQuery userQuery = new UserQuery();
            userQuery.Groups = new GroupCollectionCriterion();
            userQuery.Groups.Containing = new GroupCriterion();
            userQuery.Groups.Containing.ID = new IntegerCriterion();
            userQuery.Groups.Containing.ID.Includes = new IntegerInCriterion();
            userQuery.Groups.Containing.ID.Includes.Values.AddRange(groupIds);

Karoline

#38709
Apr 20, 2010 12:21
Vote:
 

Thank you Karoline, that did the trick!

If one would like to exclude users of a certain group (8), how do I do that?

It seems that this will not work:

membersQuery.Groups.Containing.ID.Operator = ComparisonOperator.NotEquals;
membersQuery.Groups.Containing.ID.Value = 8;

membersQuery.Groups.Containing.ID.Operator = ComparisonOperator.NotEquals;

 membersQuery.Groups.Containing.ID.Value = 8;

I still get users belonging to 8, if they at the same time belongs to som other group.

 

Jonas

#38712
Apr 20, 2010 13:17
Vote:
 

That was a tricky one, I've tried to find a solution but I ran into the same problems as you: You get the user if they belong to some other group as well.

The only solution I can think of right now should work, but it's not a very good solution:

            UserCollection allUsers = CommunitySystem.CurrentContext.DefaultSecurity.GetUsers();

            UserQuery excludedUserQuery = new UserQuery();
            excludedUserQuery.Groups = new GroupCollectionCriterion();
            excludedUserQuery.Groups.Containing = new GroupCriterion();
            excludedUserQuery.Groups.Containing.ID = new IntegerCriterion();
            excludedUserQuery.Groups.Containing.ID.Value = 593;

            UserCollection excludedUsers = QueryHandler.GetQueryResult(excludedUserQuery);

            // Get all users who are not in the excludedUsers UserCollection
            IEnumerable users = from u in allUsers where !excludedUsers.Contains(u) select u;

I'll think a little bit about it to see if I can come up with a better one :)

Karoline

 

#38738
Apr 20, 2010 15:56
This thread is locked and should be used for reference only. Please use the Legacy add-ons forum to open new discussions.
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.