public static async Task <IUser[]> GetUsersInGroupsAsync(IEnumerable <string> groupNames,
                                                                 QueryBehaviour behaviour)
        {
            // validate input parameters
            ParameterValidator.AssertIsNotNull("groupNames", groupNames);

            var nonEmptyGroups = groupNames.Where(o => !string.IsNullOrWhiteSpace(o)).ToArray();

            ParameterValidator.AssertIsNotNullOrEmptyList("groupsNames", nonEmptyGroups);

            // return a list of users within the specified group
            var client = GetGroupsClient();

            IUser[] users;

            if (behaviour == QueryBehaviour.All)
            {
                users = (IUser[])await client.Execute(o => o.GetUsersInGroupsAsync(nonEmptyGroups));
            }
            else
            {
                users = (IUser[])await client.Execute(o => o.GetUsersInAnyGroupsAsync(nonEmptyGroups));
            }

            return(users);
        }
        public static async Task <IEnumerable <string> > GetEmailAddressesFromActiveDirectoryGroupsAsync(
            IEnumerable <string> groupNames)
        {
            // validate input parameters
            var parameterValue = groupNames as string[] ?? groupNames.ToArray();

            ParameterValidator.AssertIsNotNullOrEmptyList("groupNames", parameterValue);

            // return a list of non-null email addresses for the members of the specified groups
            var users = await GetUsersInGroupsAsync(parameterValue, QueryBehaviour.Any);

            return(users.Select(o => o.Email.Trim()).Where(o => !string.IsNullOrEmpty(o)));
        }