Encuentra diferencias entre dos entidades del mismo tipo

Estoy trabajando en una aplicación web mvc3. Cuando el usuario actualiza algo, quiero comparar los datos antiguos con los nuevos que el usuario está ingresando y para cada campo que sea diferente, agregarlos a un registro para crear un registro de actividad.

Ahora mismo, así es como se ve mi acción de guardar:

[HttpPost]
public RedirectToRouteResult SaveSingleEdit(CompLang newcomplang)
{
    var oldCompLang = _db.CompLangs.First(x => x.Id == newcomplang.Id);

    _db.CompLangs.Attach(oldCompLang);
    newcomplang.LastUpdate = DateTime.Today;
    _db.CompLangs.ApplyCurrentValues(newcomplang);
    _db.SaveChanges();

    var comp = _db.CompLangs.First(x => x.Id == newcomplang.Id);

    return RedirectToAction("ViewSingleEdit", comp);
}

Descubrí que podía usar esto para recorrer mi propiedad de oldCompLang:

var oldpropertyInfos = oldCompLang.GetType().GetProperties();

Pero esto realmente no ayuda, ya que solo me muestra las propiedades (Id, Nombre, Estado ...) y no los valores de estas propiedades (1, Hola, Listo ...).

Podría seguir el camino difícil:

if (oldCompLang.Status != newcomplang.Status)
{
    // Add to my activity log table something for this scenario
}

Pero realmente no quiero estar haciendo eso para todas las propiedades del objeto.

No estoy seguro de cuál es la mejor manera de recorrer ambos objetos para encontrar desajustes (por ejemplo, el usuario cambió el nombre o el estado ...) y crear una lista de esas diferencias que puedo almacenar en otra tabla.

Respuestas a la pregunta(5)

Su respuesta a la pregunta