private void UpdateMemberCallings(string[] selectedCallings, Member memberToUpdate) { if (selectedCallings == null) { memberToUpdate.Calling_Members = new List <Calling_Member>(); return; } var selectedCallingsHS = new HashSet <string>(selectedCallings); var memberCallings = new HashSet <int>(memberToUpdate.Calling_Members.Select(c => c.Calling.CallingId)); foreach (var calling in _context.Callings) { if (selectedCallingsHS.Contains(calling.CallingId.ToString())) { if (!memberCallings.Contains(calling.CallingId)) { memberToUpdate.Calling_Members.Add(new Calling_Member { MemberId = memberToUpdate.MemberId, CallingId = calling.CallingId }); } } else { if (memberCallings.Contains(calling.CallingId)) { Calling_Member callingToRemove = memberToUpdate.Calling_Members.FirstOrDefault(i => i.CallingId == calling.CallingId); _context.Remove(callingToRemove); } } } }