public void Merge(TrackPlayer originalPlayer) { // simple fields just use original player FreeCompany = originalPlayer.FreeCompany; CategoryId = originalPlayer.CategoryId; Icon = originalPlayer.Icon; Color = originalPlayer.Color; Alert = originalPlayer.Alert; CategoryId = originalPlayer.CategoryId; // names if (Names == null) { Names = new List <string>(); } foreach (var name in originalPlayer.Names) { if (!Names.Contains(name)) { Names.Add(name); } } // home worlds if (HomeWorlds == null) { HomeWorlds = new List <TrackWorld>(); } var newPlayerWorldIds = HomeWorlds.Select(world => world.Id).ToList(); var originalPlayerWorldIds = originalPlayer.HomeWorlds.Select(world => world.Id).ToList(); var originalPlayerWorldNames = originalPlayer.HomeWorlds.Select(world => world.Name).ToList(); foreach (var worldId in originalPlayer.HomeWorlds.Select(world => world.Id).ToList()) { if (!newPlayerWorldIds.Contains(worldId)) { HomeWorlds.Add(new TrackWorld { Id = worldId, Name = originalPlayerWorldNames[originalPlayerWorldIds.IndexOf(worldId)] }); } } // notes Notes = originalPlayer.Notes + " " + Notes; // encounters if (Encounters == null) { Encounters = new List <TrackEncounter>(); } Encounters = Encounters.Concat(originalPlayer.Encounters).ToList() .OrderBy(encounter => encounter.Created).ToList(); // reset to ensure latest props ClearBackingFields(); }
public void NonDestructiveMerge(TrackPlayer originalPlayer) { if (Color == null) { Color = originalPlayer.Color; } if (Icon == 0) { Icon = originalPlayer.Icon; } if (CategoryId == 0) { CategoryId = originalPlayer.CategoryId; } Notes = originalPlayer.Notes + " " + Notes; ClearBackingFields(); }