/// <summary> /// Adds or update group member's attributes using any page parameters that are attributes of the group. /// </summary> /// <param name="person">The person.</param> /// <param name="group">The group.</param> /// <param name="rockContext">The rock context.</param> private void AddOrUpdateGroupMemberAttributes(Person person, Group group, RockContext rockContext) { var groupMember = group.Members.Where(m => m.PersonId == person.Id).FirstOrDefault(); AttributeService attributeService = new AttributeService(rockContext); // Load all the group member attributes for comparison below. var attributes = attributeService.GetGroupMemberAttributesCombined(group.Id, group.GroupTypeId); // In order to add attributes to the person, you have to first load them all groupMember.LoadAttributes(rockContext); foreach (var entry in PageParameters()) { // skip the parameter if the group's group type doesn't have that one var attribute = attributes.Where(a => a.Key.Equals(entry.Key, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); if (attribute == null) { continue; } //attribute.SetAttributeValue groupMember.SetAttributeValue(entry.Key, (string)entry.Value); } groupMember.SaveAttributeValues(rockContext); }