Reconciliando duas coleções de objetos

Eu tenho um formulário onde os usuários podem modificar uma coleção de objetos usando um DataGrid. Quando o formulário é aberto, eu crio uma cópia profunda da coleção original e, se o botão Cancelar for pressionado, descarto essa cópia.

O problema é que quando o botão OK é pressionado, eu tenho que reconciliar as alterações que podem ser:

Propriedades modificadas de objetos existentesNovos objetos adicionados a qualquer lugar na coleção.Objetos existentes removidos.Objetos existentes reordenados.

Como preciso manter as referências originais, não posso simplesmente limpar a coleção e adicionar os itens modificados.

Você conhece um algoritmo simples que sincronizaria duas coleções como essa?

Estou usando o C # 3.5, então o LINQ está disponível.

questionAnswers(3)

yourAnswerToTheQuestion